- Node.js+Webpack開發(fā)實戰(zhàn)
- 夏磊
- 519字
- 2021-03-26 21:53:53
5.2 Bluebird
Bluebird是Node.js最出名的Promise實現(xiàn),除了實現(xiàn)標準的Promise規(guī)范之外,Bluebird還提供了包裝方法,可以快速地將Node.js回調(diào)風格的函數(shù)包裝為Promise。
Node.js回調(diào)風格的函數(shù)如下:
function(err, data1, data2, ..., dataN)
回調(diào)函數(shù)的第1個參數(shù)永遠為Error對象,如果出現(xiàn)錯誤,則err值是Error對象;如果未出現(xiàn)錯誤,則err值為null。
Bluebird的使用
使用Bluebird模塊前需要使用npm安裝:
npm install bluebird --save
bluebird.promisifyAll()可以將Node.js回調(diào)風格的函數(shù)包裝為Promise函數(shù),該方法簽名如下:
bluebird.promisifyAll(target, options)
· target需要包裝的對象。如果target是普通對象,則包裝后生成的異步API只有該對象持有;如果target是原型對象,則包裝后生成的異步API被所有實例持有。
· options選項:
suffix:異步API方法名后綴,默認為“Async”。如fs.readFile()函數(shù)包裝后生成的異步API為fs.readFileAsync。
multiArgs:是否允許多個回調(diào)參數(shù),默認false。我們知道Promise的then()方法只接受一個參數(shù),而callback則可以回調(diào)多個參數(shù),multiArgs為true時,bluebird將所有callback參數(shù)傳入一個數(shù)組,Promise.then()接受該數(shù)組,從而得到多個參數(shù)。
bluebird.promisifyAll()只會給目標對象添加新方法,原來的Node.js回調(diào)風格的方法不受影響。
包裝之后的方法和包裝之前的方法使用起來只有一個差別,那就是不要傳遞回調(diào)函數(shù),通過Promise獲取結果。
下面是包裝fs對象的示例,fs不是原型對象,也沒有fs實例,因此直接包裝fs對象即可。

以上兩種方法的結果沒有區(qū)別,通過Promise包裝,可以批量地將對象進行Promise處理,結合async/await,可以極大地提升異步編程體驗。
- JavaScript前端開發(fā)模塊化教程
- Python自動化運維快速入門(第2版)
- 動手玩轉(zhuǎn)Scratch3.0編程:人工智能科創(chuàng)教育指南
- R語言數(shù)據(jù)可視化之美:專業(yè)圖表繪制指南
- Apache Spark 2 for Beginners
- FFmpeg入門詳解:音視頻流媒體播放器原理及應用
- Visual Basic程序設計(第3版):學習指導與練習
- Essential Angular
- Implementing Cisco Networking Solutions
- 響應式架構:消息模式Actor實現(xiàn)與Scala、Akka應用集成
- Orleans:構建高性能分布式Actor服務
- 新印象:解構UI界面設計
- Mastering Elixir
- Python一行流:像專家一樣寫代碼
- Python數(shù)據(jù)科學實戰(zhàn)