1. 程式人生 > >async異步流程控制

async異步流程控制

cno ace dea 方式 limit 中一 有關 參數 err

http://cnodejs.org/topic/54acfbb5ce87bace2444cbfb

先安裝:
G:\www\nodejs\one\models>npm install async --save-dev

1.串行無關聯:async.series(tasks,callback);
多個函數依次執行,之間沒有數據交換,其中一個函數出錯,後續函數不再執行
//匿名函數前必須有鍵名(one:,two:)
async.series({
one: function(callback){
callback(null, 1);
},
two: function(callback){
callback(null, 2);
}
},function(err, results) {
console.log(results);
});
2.並行無關聯:async.parallel(tasks,callback);
多個函數並行執行,最後匯總結果,如果某一個流程出錯就退出
async.parallel({
one: function(callback){
callback(null, 1);
},
two: function(callback){
callback(null, 2);
}
},function(err, results) {
console.log(results);
});
3.串行有關聯:waterfall
每一步執行時需要由上一步執行的結果當做參數.所以每一步必須串行等待
async.waterfall([
function (done) {

done(null, ‘one‘);
},
function (onearg, done) {

done(null, onearg + ‘| two‘);
},
function (twoarg, done) {

done(null, twoarg + ‘| three‘);
},
function (threearg, done) {

done(null, threearg + ‘| four‘);
}
], function (error, result) {
console.log(result);
console.timeEnd(‘waterfall‘);
})
4.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);
});


//----------------另一種方式是用Promise
http://www.jdon.com/idea/nodejs/promise.html

async異步流程控制