async 异步编程的应用
async 異步編程的應(yīng)用
1.為了解決node.js在實際項目中的異步特性,跳出回調(diào)大坑。 2.優(yōu)雅的維護自己的代碼。 3.更好的對自己的代碼進行流程控制。async.waterfall
1.async.waterfall(array,function(err,res){})。array是函數(shù)組成的數(shù)組,callback(function)是中途出錯或者全部執(zhí)行完后的回調(diào)函數(shù)。它的特點是串行執(zhí)行函數(shù),并且前一個函數(shù)的結(jié)果會傳給下一個函數(shù)。示例:
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){}).第一個傳參可以是數(shù)組或者對象,callback返回執(zhí)行的結(jié)果集,屬于串行執(zhí)行,即按順序執(zhí)行傳入的function代碼。與waterfall的區(qū)別在于后者能傳參到下一個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); });// 輸出結(jié)果 與預(yù)期正常:[1,2,3]async.map and async.each
1.這2個方法感覺用法是一致的 2.async.map(task,callback,function(err,res){});task是可以是數(shù)組或一個對象,類似與在for循環(huán)里面執(zhí)行閉包操作。都是同時執(zhí)行多條異步操作
async.mapSeries and async.eachSeries
1.都是按順序執(zhí)行操作 2.用法與map,each 一致。async.auto
1.很多時候,你邏輯里面,既有waterfull的也有parallel的,那個就要寫至少2個async函數(shù)調(diào)用,復(fù)雜的情況下,可能更多,但是async.auto的強大是在于,你定義好相互之間的dependencies,他來幫你決定用parallel還是waterfull。 2.async.auto(ojb);看一個例子:
async.auto({
func1: function (callback, results) {
callback(null, “abc”, “bbc”);
},
func1和func2可以并行執(zhí)行,func3可以和func1并行但是需要等待func2,func4最后執(zhí)行
結(jié)尾
1.以上用法是async比較常用的方法,用上他的話就可以不用擔(dān)心異步回調(diào)大坑了,async不僅可以用于數(shù)據(jù)庫操作,其他異步操作也適用,比如文件讀寫等。
總結(jié)
以上是生活随笔為你收集整理的async 异步编程的应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三元运算符和总结
- 下一篇: 小程序开发(8)-之跳转第三方小程序设计