async 是JavaScript的擴展庫。它可以簡化Node.js異步操作的書寫,使代碼更容易被讀懂,而不是嵌套一堆的括號讓人頭大。
我們可以使用Node.js的包管理器npm直接安裝它,在shell中輸入:
npm install async
這里主要說一下async的流程控制函數(shù)。
series函數(shù) 串行執(zhí)行
它的作用就是按照順序依次執(zhí)行。
async.series({
one: function(callback){
callback(null, 1);
},
two: function(callback){
callback(null, 2);
}
},function(err, results) {
console.log(results);
});
輸出:{one: 1, two: 2}
series函數(shù)的第一個參數(shù)可以是一個數(shù)組也可以是一個JSON對象,參數(shù)類型不同,影響的是返回數(shù)據(jù)的格式。
**waterfall函數(shù) **瀑布流
waterfall每個函數(shù)產(chǎn)生的值,都將傳給下一個函數(shù).
waterfall 的 tasks 參數(shù)只能是數(shù)組類型。
當有函數(shù)出錯,其err直接傳給最后的callback,出錯函數(shù)的結(jié)果被舍棄,出錯函數(shù)后面的函數(shù)不再執(zhí)行。
parallel函數(shù) 并行執(zhí)行多個函數(shù)
parallel(tasks, [callback]),
每個函數(shù)都是立即執(zhí)行,不需要等待其它函數(shù)先執(zhí)行。傳給最終callback的數(shù)組中的數(shù)據(jù)按照tasks中聲明的順序,而不是執(zhí)行完成的順序。
tasks參數(shù)可以是一個數(shù)組或是json對象。
和series函數(shù)一樣,tasks參數(shù)類型不同,返回的results格式會不一樣。
parallelLimit函數(shù) 并行執(zhí)行有個數(shù)限制的函數(shù)
parallelLimit(tasks, limit, [callback])
limit參數(shù)限制任務(wù)只能同時并發(fā)一定數(shù)量,而不是無限制并發(fā)。