先安裝:
G:\www\nodejs\study>npm install async --g
1.串行無關聯:async.series(tasks,callback);
多個函數依次執行,之間沒有數據交換,其中一個函數出錯,後續函數再也不執行 html
//-------------nj_async.js------------------------------ node
var async = require('async'); function exec(){ async.series({ one: function(done){ ii=0; setInterval(function(){ console.log('aaa='+new Date()); ii++; if(ii==3){ clearInterval(this); done(null,{one:"one"}); } },1000); }, two: function(done){ jj=0; setInterval(function(){ console.log('bbb='+new Date()); jj++; if(jj>3){ clearInterval(this); done(null,{two:"two"}); } },1000); } }, function(err,rs) { console.log(err); console.log(rs); }); } exec();
2.並行無關聯:async.parallel(tasks,callback);
多個函數並行執行,最後彙總結果,若是某一個流程出錯就退出 後面的回調會失敗npm
async.parallel({ one: function(callback){ callback(null, 1); }, two: function(callback){ callback(null, 2); } },function(err, results) { console.log(results); });
3.串行有關聯:waterfall 瀑布流
每一步執行時須要由上一步執行的結果當作參數.因此每一步必須串行等待 併發
var async = require('async');
function exec(){ async.waterfall( [ function(done){ ii=0; setInterval(function(){ console.log("aaa="+new Date()); ii++; if(ii==3){ clearInterval(this); done(null,'one完畢'); } },1000); }, function(preValue,done){ //上一函數的值 jj=0; setInterval(function(){ console.log(preValue+"="+new Date()); jj++; if(jj==3){ clearInterval(this); done(null,preValue+',two完畢'); } },1000); } ],function(err,rs){ console.log(err); console.log(rs); } ) }
4.parallelLimit(tasks, limit, [callback])
parallelLimit函數和parallel相似,可是它多了一個參數limit。
limit參數限制任務只能同時併發必定數量,而不是無限制併發,
async