如何知道异步函数何时完成

时间:2013-08-19 13:04:38

标签: javascript jquery jquery-deferred

我有一个在循环中多次调用异步函数的函数。

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的所有通话后,还有哪些方法可以继续?

1 个答案:

答案 0 :(得分:2)

  1. 回调传递到asyncFunc
  2. 回调中,有一个基于things.length
  3. 的计数器
  4. 计算回调被调用的次数
  5. 如果计数器指示更多,请结束回调
  6. 如果计数器指示这是最后一次,请继续调用
  7. e.g。回调

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