提到程式通常會談到design pattern與control flow,
而async對於control flow提供了許多簡易的操作方式。
1. 同步(series)與異步(parallel)的切換
面對io, net, 大量運算等, 這類需要耗費較多時間處理或等待的事情時, 透過異步的程序將可以大幅提升程式的執行速度.
而async提供了相對容易的切換方式,
async.parallel([
function(){ ... },
function(){ ... },
function(){ ... }
], function(){
async.series([
function(){ ... },
function(){ ... }
]);
});
2. 錯誤跳出的設計模式
在程式中的例外錯誤處理,
我們會使用到try catch throw
的方式運作與攔截,
當面對可預期的錯誤時,
async提供了callback的error處理機制,
出現錯誤時,直接跳到results處理錯誤,
且在異步或同步的狀況下都可以容易的操作。
async.series([
function(){ ... },
function(){ ... }
], function(err){
console.log('show error', err);
});
3. 處理大量request的queue機制
message queue 一直是面對大量request時,一個很棒的解法,
而async提供了queue與worker的機制,
當遇到大量的request時,http status先吐202,
接著把data放入queue後,讓worker依序執行完成。
詳細的介紹
4. 自動 retry 的機制
當服務需要做net的操作時, 因為會發生許多不可預期的狀況,
retry是一個必要的動作, 而async同樣提供了兩好的方式去操作。
5. 父子關係的優先順序
相信這也是gulp好用的關鍵之一,在一些複雜的操作裡頭,
許多function都會有先後的相依性,
而async能夠在這樣的情況下,提供良好的interface去做程式撰寫,
寫法就跟寫gulp一樣簡單,
只是我一直無法理解為何這個叫做auto。
6. 與其他library的相容性較高
NodeJS的另一個最大的特點就是EventEmitter,
它也是使用callback的機制,
面對許多NodeJS library都使用callback的情況下,
async相容性較高,且切換為promises寫法,
付出的成本也相對低。
7. 必須面對的效能問題
程式語言一直最煩人的就是效能問題,
同樣的目標往往都可以有很多種寫法,
除了考慮閱讀性外,
另一個必須要考慮到的就是效能問題。
直接參考此篇文章吧。
當然async還有許多好用的control flow,
了解每一種程式語言的特性,
才可以發威程式語言的最大優勢。