NodeJs最為人知的便是non-blocking call, 但是有時候會需要混用同步與分同步的機制
像是要從Database撈資料在回應網頁,這時候就需要等所有Query返回結束才能response
此時最好的做法是 用非同步的方式發出Query,等所有Query結束才能response
NodeJs有個處理流程的模組-
Async ,這篇記錄一下使用的方法與心得,可以到我的github查看
範例程式 或是點擊各個子標題
集合類
-each(array, function(item, callback){}, function(err){}) :
輪詢陣列的資料,執行順序async,發生error時會直接中斷
-forEachOf(array, function(value, key, callback){}, function(err){}) :
跟each用法差不多,只是iterator function可以多拿到index和value
-map(array, function(item, callback){}, function(err, results){}) :
使用起來跟each很像,最大差別在於map會產生一個新的陣列儲存結果,執行順序async,但是陣列結果跟array index順序一致
-filter (array, function(item,callback){}, function(results){}) :
results一樣會按照array的次序, iterator function會回傳真偽,results只儲存為true的值,OS:不處理error
-reject :
和filter相反,results只儲存為假的值
-reduce(arr, memo, function(memo, item, callback){}, function(err, result){}):
執行順序 sync,memo設定初始值,iterator function會依照運算合併memo與item,最後回傳一個result,適用於需要將array的item合併
-reduceRight:
與reduce操作方法相同,只是執行array順序顛倒
-detect (array, function(item,callback){}, function(result){}) :
和filter雷同,不過detect只接受第一個回傳true的值,執行順序是async,不保證array的順序
- sortBy (array, function(item,callback){}, callback(err, results){}) :
執行順序Async,iterator function用來運算值且回傳,最後的results會依照運算值大小排列原array item
-some (array, function(item,callback){}, function(result){}) :
執行順序Async,只要有一個iterator function會回傳true,result就是true
-every (array, function(item,callback){}, function(result){}) :
執行順序Async,所有中間的function會回傳true,result才是true
-concat (array, function(item,callback){}, function(results){}) :
執行順序Async,iterator function可以回傳array,results會async儲存iterator function傳回來的array
心得:使用時要注意,有時候result是儲存iterator function回傳值,有些是依照iterator function回傳值排序原array item。