2013-08-19 195 views
0

我有在一個循環中調用異步函數多次的功能。如何知道什麼時候異步函數完成

function myFunc() { 
    var things = [1, 2, 3, 4, 5]; 

    $.each(things, asyncFunc); 

    alert('Things ' + things.join() + ' have all been processed.'); 
} 

function asyncFunc(key, value) { 
    $.post('api.php', value: thing); 
} 

我只想在所有異步調用完成時才繼續。

我可以做回asyncFunc一個延遲的對象,並調用在$.post.done方法.resolve(),但我怎麼能阻止.each循環,當asyncFunc只有在完成繼續嗎?

什麼其他的方法是否有繼續的時候才asyncFunc所有呼叫都做了什麼?

回答

2
  1. 傳遞一個回調asyncFunc
  2. 回調,都基於things.length
  3. 指望有多少次回調被稱爲
  4. 如果計數器顯示更多的反走,結束回調
  5. 如果計數器INDI蓋茨認爲這是最後一次,繼續調用

例如回調

var count = things.length, 
    callback = function() { 
     if (0<--count) return; 
     // do stuff 
    }; 
+0

嗯,不錯。我已經在'asyncFunc'中有一個回調,所以我只是將額外的回調函數添加到當前回調的末尾。無論如何,你能否讓你的答案顯示新的人的整個工作代碼發現? – CJxD

相關問題