淺談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同樣完成或被拒絕,最終值或拒絕原因也與之相同

 

 

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