官术网_书友最值得收藏!

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,可以極大地提升異步編程體驗。

主站蜘蛛池模板: 永丰县| 阿克陶县| 文安县| 依安县| 洛隆县| 临漳县| 江永县| 淮阳县| 海丰县| 郁南县| 平乐县| 巫山县| 南充市| 东兰县| 崇左市| 南澳县| 获嘉县| 宜丰县| 稷山县| 离岛区| 田阳县| 哈尔滨市| 文成县| 鄂伦春自治旗| 金山区| 林周县| 六安市| 昌吉市| 同心县| 永新县| 定安县| 高雄县| 石台县| 潮安县| 砀山县| 太湖县| 阳江市| 昌吉市| 丽水市| 湖口县| 北流市|