函數有:
series
waterfall
parallel
parallelLimit
…
series函數 串行執行
它的作用就是按照順序一次執行。
async.series({ one: function(callback){ callback(null, 1); }, two: function(callback){ callback(null, 2); } },function(err, results) { console.log(results); });
輸出:{one: 1, two: 2}
series函數的第一個參數可以是一個數組也可以是一個JSON對象, 參數類型不同,影響的是返回數據的格式。
waterfall函數 瀑布流
waterfall和series函數有很多相似之處,都是按照順序執行。 不同之處是waterfall每個函數產生的值,都將傳給下一個函數,而series則沒有這個功能,示例如下:
async.waterfall([ function(callback){ callback(null, 'one', 'two'); }, function(arg1, arg2, callback){ // arg1 now equals 'one' and arg2 now equals 'two' callback(null, 'three'); }, function(arg1, callback){ // arg1 now equals 'three' callback(null, 'done'); } ], function (err, result) { // result now equals 'done' console.log(result); });
另外需要注意的是 waterfall 的 tasks 參數只能是數組類型。 當中途有函數出錯,其err直接傳給最終callback,結果被丟棄,后面的函數不再執行。
parallel(tasks, [callback])
parallel函數是并行執行多個函數,每個函數都是立即執行,不需要等待其它函數先執行。 傳給最終callback的數組中的數據按照tasks中聲明的順序,而不是執行完成的順序,示例如下:
async.parallel([ function(callback){ callback(null, 'one'); }, function(callback){ callback(null, 'two'); } ], function(err, results){ });
tasks參數可以是一個數組或是json對象,和series函數一樣, tasks參數類型不同,返回的results格式會不一樣。
parallelLimit(tasks, limit, [callback])
parallelLimit函數和parallel類似,但是它多了一個參數limit。 limit參數限制任務只能同時并發一定數量,而不是無限制并發,示例如下:
async.parallelLimit([ function(callback){ callback(null, 'one'); }, function(callback){ callback(null, 'two'); } ], 2, function(err, results){ console.log(results); });