bluebird
是一个第三方Promise
类库,相比其它第三方类库或标准对象来说,功能更齐全而不臃肿、浏览器兼容性更好。
我们可通过npm
命令来安装:npm install bluebird
通过require
获取对模块的引用:cnst Promise = require('bluebird');
我们可以看到官方的api使用说明
但我们在项目中常会使用的方法有一下几部分
1: .all
, .props
2: .map
, .each
, .mapSeries
3: .filter
, .reduce
4: .any
, .some
, .race
我们可以分为这几部分来说明
第一部分 .all
, .props
通过上面的图可以总结相同点不不同点和使用场景
相同点:
- 两个都是执行多个Promise
- 返回给res的值是所有promise的结果
- 都是并行处理的和执行顺序没有关系
不同点:
- 参数 iterator 不同,
.all
是一個 Array 而.props
是 Object - 主要差别結果
res
格式不同,.all
是会产生Array[]
,而.props
产生 Object{}
使用场景
- 只想要快完成 Promise 操作,不需要的对返回结果有处理,使用
.all
写法会简单很多 - .all .props都是并行处理 多个 Promise function,所以仍要注意,如果一次处理太多的 Promise function ,会有过高的 system load 问题
第二部分.each
, .map
, .mapSeries
相同点:
- 传入的
items都是array[]
- 处理成功后返回结果也是array[]
- 执行完所有的items后才会返回结果
不同点:
- .each和
.mapSeries
相似,都会按照顺序执行 .map
和.mapSeries
执行后的结果可以返回新的的结果 而.each
产生的结果只是原来的数据集不可以随意改变结构.map
可以多加一個concurrency
参数,可以一次指定并行处理多少个
使用场景
- 除非在特定情況,必须要使用給定的值 否則都不建议使用
.each
- 如果要增加執行速度,建议使用
.map
,但是为了系统未定型,建议使用concurrency
参数 - 如果确定要执行的顺序的话使用
.mapSeries
第三部分.filter
, .reduce
.filter 可以等待多个 Promise 的完成,并对结果进行过滤。它实际上的效果相当于在 Promise.map 之后使用 Array 的 filter 方法来进行过滤
.reduce 把多个 Promise 的结果缩减成单个值。其作用类似 Array 的 reduce 方法,但是可以处理 Promise 对象
第三部分.any
, .some
, .race
.any 相当于使用 Promise.some 并把数量设为1,不过 Promise.any 的结果不是一个长度为1的数组,还是具体的单个值
.some
如果只需要等待其中部分 Promise 完成,可以使用 Promise.some 并指定完成的 Promise 数量。在代码清单10中,只需要等待2个文件读取操作完成即可。
.race race方法返回一个promise,只要传入的诸多promise中的某一个完成或被拒绝,则该promise同样完成或被拒绝,最终值或拒绝原因也与之相同
如果写的对你有一点点帮助的话,就随便帮下小明同学 感谢大伙 !!!
一、 左下角点个赞再走吧,给博主一点关怀,可以让更多人看到
二、可以关注我的微信公众号「一起学Node」基于前后端NodeJs相关技术栈分享 交流 学习