2016年1月1日 星期五

NodeJs - Async 用法(集合類)

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。


沒有留言:

張貼留言