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

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

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 了:




相关文章
|
20天前
|
数据可视化 前端开发 JavaScript
可视化工具D3.js
可视化工具D3.js
|
2月前
|
存储 JavaScript 前端开发
js中map属性
js中map属性
39 1
|
18天前
|
存储 JavaScript 前端开发
js的map和set |21
js的map和set |21
|
18天前
|
JavaScript 前端开发
js map和reduce
js map和reduce
|
26天前
|
JavaScript 前端开发
JavaScript Array map() 方法
JavaScript Array map() 方法
|
4天前
|
数据可视化 前端开发 JavaScript
可视化工具D3.js
可视化工具D3.js
|
29天前
|
JavaScript Linux 开发者
一个用于管理多个 Node.js 版本的安装和切换开源工具
【9月更文挑战第14天】nvm(Node Version Manager)是一个开源工具,用于便捷地管理多个 Node.js 版本。其特点包括:版本安装便捷,支持 LTS 和最新版本;版本切换简单,不影响开发流程;多平台支持,包括 Windows、macOS 和 Linux;社区活跃,持续更新。通过 nvm,开发者可以轻松安装、切换和管理不同项目的 Node.js 版本,提高开发效率。
|
15天前
|
C++
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
|
17天前
|
JavaScript 前端开发
JavaScript 中 五种迭代数组的方法 every some map filter forEach
本文介绍了JavaScript中五种常用数组迭代方法:every、some、filter、map和forEach,并通过示例代码展示了它们的基本用法和区别。
|
20天前
|
存储 前端开发 JavaScript
node中循环异步的问题[‘解决方案‘]_源于map循环和for循环对异步事件配合async、await的支持
本文探讨了在Node.js中处理循环异步操作的问题,比较了使用map和for循环结合async/await处理异步事件的差异,并提供了解决方案。
28 0