前言
大家在編寫異步程序時,最頭痛的就是不知道結果什么時候返回給我們,然后執行后面的操作,很多時候只能把后面的操作放到返回成功的函數里,或者使用計數器等方法。
比較典型的兩個就是:后面的操作需要依賴上一個異步操作的結果;多個異步操作并行執行,都執行完成后再執行接下來的操作。
這兩個操作中,第一個異步的程序我們可能會寫成這樣:
db.select(SQL1, function(res1){ db.delete(SQL2, function(res2){ db.insert(SQL3, function(res3){ // ... }) })});將后面的操作寫到執行成功后的回調函數里。第2個并行的異步操作,可以使用計數器的方法,每個異步調用成功時,計數器加1,當所有的異步都調用成功后,再接著執行:
var count = 0;var success = function(){ count++; if(count>=3){ console.log('執行完畢...'); }}var select = function(){ db.select(sql, function(res){ success(); })}var select2 = function(){ db.select(sql, function(res){ success(); })}var select3 = function(){ db.select(sql, function(res){ success(); })}select();select2();select3();這些編寫方式非常麻煩,而且代碼邏輯比較混亂,調試起來也很不方便。那么就要用到異步控制的利器async了。
介紹
async的作用是進行流程的控制,而且提供了非常多的方法可供調用。
這些方法可以分為三大類:
下面我們從這三個分類里分別挑出幾個方法進行講解。
二、函數介紹
async中提供了非常多的方法可供使用,我們僅僅是講解其中幾個比較有代表性的,其他的可以訪問官方文檔:http://caolan.github.io/async/docs.html。
2.1 集合類
集合類中的方法主要有some, ‘map', ‘each', ‘every'等,這些方法是對數組或組合進行某個相同的操作后,統一執行回調函數。
我們以map為例,map對集合中的每一個元素,執行某個相同的異步操作,得到結果。所有的結果將匯總到最終的callback里。
使用方法,map接收三個參數,分別是:
| 參數名稱 | 類型 | 說明 |
| coll | iteratee | callback |
| Array | Iterable | Object | function | function |
| 需要處理數組,集合或其他可迭代的類型 | 迭代方法,用來對集合中的每一項進行處理。該方法接收兩個參數(item, callback);item為集合中的每一項, callback為回調函數。callback需要帶有err(有時可能為null)和處理后的數據,callback(err, data) | 最終回調函數,當集合處理完畢后調用此函數,傳遞兩個參數err和result,result為之前處理后的所有的結果的集合 |
新聞熱點
疑難解答
圖片精選