async.js 主要解決 node異步函數的流程控制。node
1. 多個異步依次順序執行。若是有異常拋出時就當即執行回調函數, 回調函數的err爲拋出的異常;若是沒有異常拋出,當全部異步函數完成後,執行成功回調函數,err值爲null, result 爲異步數組的結果數組git
async.series([ function(callback) { doAsync1(arg, callback); }, function(callback) { doAsync2(arg, callback); }, function(callback) { doAsync3(arg, callback); } ], function(err, result) { console.log(result); });
在線demo: http://jsbin.com/sisasu/edit?js,console,outputgithub
2.多個異步依次順序執行,且後面異步函數的依賴前面異步函數的輸出c#
async.waterfall([ function(callback) { doAsync1(2, callback); }, function(arg, callback) { doAsync2(arg, callback); }, function(arg, callback) { doAsync3(arg, callback); } ], function(err, result) { console.log(result); });
在線demo: http://jsbin.com/yozuje/edit?js,console,outputsegmentfault
3.多個異步並行執行,當全部異步函數執行完成後執行回調函數,回到函數的參數爲以前異步函數執行結果的數組,若是須要限制並行執行的數量能夠使用parallelLimit
數組
async.parallel([ function(callback) { doAsync1(arg, callback); }, function(callback) { doAsync2(arg, callback); }, function(callback) { doAsync3(arg, callback); } ], function(err, result) { console.log(result); });
在線demo: http://jsbin.com/mugixu/edit?js,console,output異步
async.each(arr, doAsync, function(err, result){ console.log(result); }); // 等同於 async.each(arr, function(item, callback){ doAsync(item, callback); }, function(err, result){ console.log(result); });
在線demo: http://jsbin.com/supuko/edit?js,console,outputasync
http://segmentfault.com/n/1330000004401616函數