async異步流程控制
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異步流程控制