nodejs
是基于異步的寫法胚想,但是有時候當(dāng)我們查詢數(shù)據(jù)庫的時候 我們需要上一個函數(shù)的返回值做參數(shù)砌些,這樣就陷入了回調(diào)地獄设江。 之前寫api時候遇到 我需要for循環(huán)查詢數(shù)據(jù)庫 然后放在數(shù)組里 返回給前端暇屋。最后用到了 Async
.GitHub地址
安裝Async
npm install async
串行無關(guān)聯(lián)
多個函數(shù)或方法要依次執(zhí)行似袁,但是他們之間并沒有什么聯(lián)系,只有先后的順序,比如我要寫一個文件昙衅,寫完之后像用戶發(fā)送郵件扬霜,這兩者之間沒有必然的聯(lián)系,但是發(fā)郵件必須在寫文件完成之后而涉。
async里有一個方法series可以實現(xiàn)這一流程,代碼實現(xiàn)如下:
var async = require('async');
console.time('series');
async.series({
one: function(callback) {
callback(null, 'one');//callback('i am err','one');異常處理
},
two: function(callback) {
callback(null, 'two');
},
}, function(error, result) {
//最后結(jié)果
console.log('error: ' + error);
console.log('result: ' + result);
console.timeEnd('series');
});
串行有關(guān)聯(lián)
多個函數(shù)或方法執(zhí)行著瓶,每一步執(zhí)行時都需要上一步執(zhí)行的結(jié)果當(dāng)參數(shù),所以就會有串行等待啼县。async里有waterfall可以實現(xiàn)此場景:
var async = require('async');
console.time('waterfall');
async.waterfall([
function(callback) {
callback(null, 'one');
},
function(onearg, callback) {
callback(null, onearg + '>>>two');
},
function(twoarg, callback) {
callback(null, twoarg + '>>>three');
},
function(threearg, callback) {
callback(null, threearg + '>>>four');
}
], function(error, result) {
console.log('error: ' + error);
console.log('result: ' + result);
console.timeEnd('waterfall');
});
繼續(xù)學(xué)習(xí)中...