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函数