Nodejs中Async模塊的流程控制方法


      首先,使用Asycn模塊需要安裝,它不是node自帶的。其次,該模塊有大約20多個流程控制方法,我們在這里僅分析常用的series, parallel, waterfall, auto這四種,並且盡量從原理上進行分析。

      首先是series。顧名思義,它是控制異步函數按照串行順序執行,只有前一個執行完畢,才能執行下一個異步調用。回調函數cb有兩個參數:error和data,而它們可以為null。回調函數舉個例子:

async.series([function(cb){
    setTimeout(function(){
        cb(null,1);
    },1000)
},function(cb){
    setTimeout(cb,1000,null,2); 
}],function(err,result){  //result是每個回調函數傳進來的data參數,result=[1,2]
    if (err) console.error(err);
    else console.log(result);
})

        parallel的用法和series類似。只是數組中的函數是並行執行,parallel的總時間取決於運行時間最長的函數。而最終的回調函數里result的值是按照數組中函數的順序排列的。

async.parallel([function(cb){
    setTimeout(function(){
        cb(null,1);
    },1000)
},function(cb){
    setTimeout(cb,1000,null,2);
}],function(err,result){  //result=[1,2]
    if (err) console.error(err);
    else console.log(result);
})

        waterfall用法上有區別。waterfall中cb的參數data直接傳給下一個函數,最后一個函數cb的data參數直接傳給回調函數的result。

async.waterfall([function(cb){
    setTimeout(function(){
        cb(null,1);
    },1000)
},function(data,cb){
    setTimeout(cb,1000,null,data+"+"+"2");
}],function(err,result){  //result = "1+2"
    if (err) console.error(err);
    else console.log(result);
})

     以上都是API用法,下面我們試着實現一下原理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM