2013-08-19 3 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 возвращения отложенного объекта и вызвать .resolve() в методе $.post.done, но тогда как я мог заблокировать цикл .each и продолжаю только тогда, когда asyncFunc закончена?

Какие еще способы можно продолжить, только если все звонки на asyncFunc сделаны?

ответ

2
  1. Проходят обратного вызова в asyncFunc
  2. В обратного вызова, имеют счетчик на основе things.length
  3. сосчитать, сколько раз обратного вызова привлекаемого
  4. Если противопоказано больше go, end callback
  5. Если счетчик indi указывает, что это последний раз, продолжить вызов

например. обратный вызов

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

Ах, хорошо. У меня уже есть обратный вызов в 'asyncFunc', поэтому я просто добавил дополнительный вызов обратного вызова в конец текущего обратного вызова. В любом случае, не могли бы вы дать ответ, чтобы показать весь рабочий код для новых людей, чтобы узнать, пожалуйста? – CJxD

Смежные вопросы