浅谈bluebird包的使用理解

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

通过上面的图可以总结相同点不不同点和使用场景

相同点:

  1. 两个都是执行多个Promise
  2. 返回给res的值是所有promise的结果
  3. 都是并行处理的和执行顺序没有关系

不同点:

  1. 参数 iterator 不同, .all 是一个 Array 而 .props 是 Object
  2. 主要差别结果 res 格式不同,.all 是会产生Array [],而 .props 产生 Object {}

使用场景

  1. 只想要快完成 Promise 操作,不需要的对返回结果有处理,使用 .all 写法会简单很多
  2. .all .props都是并行处理 多个 Promise function,所以仍要注意,如果一次处理太多的 Promise function ,会有过高的 system load 问题

 

第二部分.each.map.mapSeries

相同点:

  1. 传入的 items都是array[]
  2. 处理成功后返回结果也是array[]
  3. 执行完所有的items后才会返回结果

不同点:

  1.  .each和 .mapSeries 相似,都会按照顺序执行
  2. .map 和 .mapSeries 执行后的结果可以返回新的的结果  而 .each 产生的结果只是原来的数据集不可以随意改变结构
  3. .map 可以多加一个 concurrency 参数,可以一次指定并行处理多少个

使用场景

  1. 除非在特定情况,必须要使用给定的值 否则都不建议使用 .each
  2. 如果要增加执行速度,建议使用 .map ,但是为了系统未定型,建议使用 concurrency 参数
  3. 如果确定要执行的顺序的话使用.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同样完成或被拒绝,最终值或拒绝原因也与之相同

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章