首页 > 编程语言 >Node.js 工具库 BlueBird 的一些例子:map,each 和 some

Node.js 工具库 BlueBird 的一些例子:map,each 和 some

时间:2022-09-24 13:59:11浏览次数:50  
标签:Node map task some Promise result async data bluebird

map

我是 Array.map() 函数的模拟,但用于异步任务。 我可以接受一个并发参数并返回一个 Promise,当所有任务完成后该 Promise 将被 resolved。 我的代码更短,特别是当用户需要限制并行任务的数量时非常有用。

看个具体的例子:

const bluebird = require('bluebird');

async function task(data, ms = 1000) {
  console.log(' in async task: ', data);
  await bluebird.delay(ms);
  return data;
}

bluebird.map(['A', 'B', 'C', 'D', 'E', 'F'], async (item) => {
  return task(item);
}, { concurrency: 1 }).then((result) => {
  console.log('final result:', result);
});

每隔一秒钟,打印一行语句:in async task: XX

map 输入参数全部被处理后,打印:final result:[ 'A', 'B', 'C', 'D', 'E', 'F' ]

如果把 Concurrency 参数改成 2,那么每秒钟同时处理两个元素。

each

BlueBird 采用一个可迭代的参数并像原生函数 Array.forEach() 一样对其进行循环。 它还采用了一个回调参数,它可以是异步函数,也可以是任何返回 Promise 的函数。 这个方法不会一次完成所有任务,而是一个接一个地完成任务。 换句话说,每个单位时间做一件事。 由于开发人员不能在原生的 Array.forEach() 函数内进行异步工作,这种场景下可以切换到 BlueBird 的 forEach 实现。

下面的代码和 concurrency = 1 的 map 效果完全一致:

const bluebird = require('bluebird');

async function task(data, ms = 1000) {
  console.log('in async task for each: ', data);
  await bluebird.delay(ms);
  return data;
}

bluebird.each(['A', 'B', 'C', 'D', 'E', 'F'], async (item) => {
  return task(item);
}).then((result) => {
  console.log(result);
});

some

some 将一组 promise 作为第一个参数,将 count 参数作为第二个参数。 该方法返回一个 Promise,一旦给定 Promise 数组中的 Promise 被 resolved 的个数达到了 count,some 返回的 Promise 就会被 resolve.

例如,如果您给我一个包含 10 个承诺和 3 个作为计数参数的列表,我将返回一个承诺,一旦您的列表中的 3 个承诺被履行,该承诺就会被履行。 结果,我返回一个数组,其中包含已履行承诺的结果。

看个具体的例子:

const bluebird = require('bluebird');

async function task(data, ms = 1000) {
  console.log(`${data} started`);
  await bluebird.delay(ms);
  console.log(`${data} done`);
  return data;
}

const promises = [2, 0, 1, 9].map(item => task(item ,item * 500));

bluebird.some(promises, 3).then((result) => {
  console.log(' bluebird 3 promised resolved: ', result);
});

结果:0 1 2 被 resolve 之后,some 调用返回的 Promise 就 resolve 了:

标签:Node,map,task,some,Promise,result,async,data,bluebird
From: https://www.cnblogs.com/sap-jerry/p/16725518.html

相关文章

  • JavaScript中数组的flatMap方法
    认识flatMapflatMap是数组的一个新方法,它会遍历原数组的每一个元素,并且会为每个元素都执行一次传入的回调函数,最终把所有元素执行回调函数返回的结果压缩成一个新数组,fla......
  • node-sass安装报错及其解决方案
    一、下载依赖报错这里报错了也就没后面的剧情了,就像电视剧刚开局主角就嗝屁了,看看执行npmi的时候报错类容:二、解决方案1、下载源在国外,更换中国镜像源,删除package.js......
  • 学习笔记-Nmap基础用法
    Nmap安装包下载:https://nmap.org/download.htmlkali自带Nmap基本功能1.默认方式扫描:命令格式:nmap<扫描对象地址>只会扫描常用端口,不能做到全端口扫......
  • go中使用map的键排序
    packagemainimport("fmt""sort")funcmain(){//待排序队列varstuScore=map[int]string{1:"ee",5:"cc",4:"ff",9:"qq",3:"aa",2:"bb"}fmt.Println(stu......
  • go中使用map的值排序
    packagemainimport( "fmt" "sort")funcmain(){ //待排序队列 varstuScore=map[string]int{"ee":20,"cc":90,"ff":70,"qq":40,"aa":79,"bb":30} //创建......
  • 前端Node.js-Day38
    mysql操作数据库查询语句:使用select查询,得到的结果是数组形式。db.query('select*fromseven',(err,res)=>{//查询失败if(err)returnconsole.log('......
  • 谷歌MapReduce经典论文翻译(中英对照)
    MapReduce:SimplifiedDataProcessingonLargeClusters(MapReduce:简化大型集群下的数据处理)作者:JeffreyDeanandSanjayGhemawatAbstract(摘要)MapReduceisapr......
  • NodeJs——Parsing error: Cannot read file '.../tsconfig.json'.eslint
    前言之前没有问题,今天打开项目后,ts文件中的import突然报Parsingerror:Cannotreadfile'.../tsconfig.json'.eslint,查了下stackoverflow内容以下为大家给出的一些......
  • 编程规约-处理Map List Set
    编程规约-处理MapListSetMapCollectors类的toMap()方法相同键相关联的值之间的冲突在使用java.util.stream.Collectors类的toMap()方法转为Map集合时,一定要使......
  • SpringBoot中重写addCorsMapping解决跨域以及提示list them explicitly or consider u
    场景SpringBoot中通过重写WebMvcConfigurer的addCorsMapping方法实现后台服务解决跨域问题:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/111283955在Spr......