当前位置: 首页 > Web前端 > HTML

Node.js实用程序库BlueBird中的一些示例:map、each和some

时间:2023-03-28 20:02:16 HTML

map我是Array.map()函数的模拟,但用于异步任务。我可以采用并发参数并返回一个Promise,当所有任务完成时,该Promise将被解决。我的代码更短,当用户需要限制并行任务的数量时特别有用。看一个具体的例子:constbluebird=require('bluebird');asyncfunctiontask(data,ms=1000){console.log('inasynctask:',data);等待蓝鸟延迟(毫秒);返回数据;}bluebird.map(['A','B','C','D','E','F'],async(item)=>{returntask(item);},{并发性:1}).then((result)=>{console.log('finalresult:',result);});每隔一秒,打印一行语句:在异步任务中:XXmap处理完所有输入参数后,打印:最终结果:['A','B','C','D','E','F']如果Concurrency参数改为2,那么每秒都会同时处理两个元素。eachBlueBird接受一个可迭代参数并像本机函数Array.forEach()一样对其进行循环。它还接受一个回调参数,该参数可以是异步函数,也可以是任何返回Promise的函数。这种方法不是一下子完成所有任务,而是一个接一个地完成任务。换句话说,每单位时间做一件事。由于开发人员无法在本机Array.forEach()函数内异步工作,因此在这种情况下他们可以切换到BlueBird的forEach实现。下面的代码和concurrency=1的map完全一样:constbluebird=require('bluebird');asyncfunctiontask(data,ms=1000){console.log('inasynctaskforeach:',data);等待蓝鸟延迟(毫秒);返回数据;}bluebird.each(['A','B','C','D','E','F'],async(item)=>{returntask(item);}).then((result)=>{console.log(result);});some将一个promises数组作为第一个参数,将一个计数参数作为第二个参数。此方法返回一个Promise。一旦给定的Promise数组中已解决的Promise数量达到count,则某些返回的Promise将被解决。列表,我将返回一个承诺,一旦您列表中的3个承诺得到履行,该承诺就会兑现。结果,我返回了一个数组,其中包含已履行承诺的结果。看一个具体的例子:constbluebird=require('bluebird');asyncfunctiontask(data,ms=1000){console.log(`${data}started`);等待蓝鸟延迟(毫秒);安慰。日志(`${data}完成`);返回数据;}constpromises=[2,0,1,9].map(item=>task(item,item*500));bluebird.some(promises,3).then((result)=>{console.log('bluebird3promisedresolved:',result);});结果:012resolve后,resolvedsomecall返回的Promise: