async 異步編程的應用

async 異步編程的應用

1.爲了解決node.js在實際項目中的異步特性,跳出回調大坑。
2.優雅的維護自己的代碼。
3.更好的對自己的代碼進行流程控制。

async.waterfall

1.async.waterfall(array,function(err,res){})。

array是函數組成的數組,callback(function)是中途出錯或者全部執行完後的回調函數。它的特點是串行執行函數,並且前一個函數的結果會傳給下一個函數。示例:

    async.waterfall([  
    function(callback){  
    callback(null, 'one', 'two');  
    },  
    function(arg1, arg2, callback){  
    callback(null, 'three');  
    },  
    function(arg1, callback){  
    // arg1 now equals 'three'  
    callback(null, 'done');  
    }  
    ], function (err, result) {  
    // result now equals 'done'      
    });  

async.series

1.ayync.series(array or obj,function(err,res){}).

第一個傳參可以是數組或者對象,callback返回執行的結果集,屬於串行執行,即按順序執行傳入的function代碼。與waterfall的區別在於後者能傳參到下一個function進行邏輯操作。不過我們可已通過對變量的賦值達到waterfall同樣的效果。

let data = [];
data.push(function(callback){
    callback(null,1);
})
data.push(function(callback){
    //啓用定時器,模擬異步操作
    setTimeout(function(){
        callback(null,2);
    },2000)

});
data.push(function(callback){
    callback(null,3);

});

async.series(data,function(err,row){
    console.log(row);
});

// 輸出結果 與預期正常:[1,2,3]

async.map and async.each

1.這2個方法感覺用法是一致的 
2.async.map(task,callback,function(err,res){});

task是可以是數組或一個對象,類似與在for循環裏面執行閉包操作。都是同時執行多條異步操作

async.mapSeries and async.eachSeries

1.都是按順序執行操作
2.用法與map,each 一致。

async.auto

1.很多時候,你邏輯裏面,既有waterfull的也有parallel的,那個就要寫至少2個async函數調用,複雜的情況下,可能更多,但是async.auto的強大是在於,你定義好相互之間的dependencies,他來幫你決定用parallel還是waterfull。
2.async.auto(ojb);

看一個例子:
async.auto({
func1: function (callback, results) {
callback(null, “abc”, “bbc”);
},

func2: function (callback, results) {  
console.log("Print#1:\n" + util.inspect(results));  
callback(null, { "puncha": "during" });  
},  
func3: ["func2", function (callback, results) {  
console.log("Print#2:\n" + util.inspect(results));  
callback(null, 3);  
}],  
func4: ["func1", "func3", function (callback, results) {  
console.log("Print#3:\n" + util.inspect(results));  
callback(null);  
}]  
});  

func1和func2可以並行執行,func3可以和func1並行但是需要等待func2,func4最後執行

結尾

1.以上用法是async比較常用的方法,用上他的話就可以不用擔心異步回調大坑了,async不僅可以用於數據庫操作,其他異步操作也適用,比如文件讀寫等。

發佈了41 篇原創文章 · 獲贊 13 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章