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

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的调用完成后,还有什么其他方式可以继续?

最佳答案

将回调传递到asyncFunc
在回调中,有一个基于things.length的计数器
计算回调已被调用的次数
如果计数器指示还有其他操作,请结束回调
如果计数器指示这是最后一次,则继续调用


例如打回来

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

关于javascript - 如何知道异步函数何时完成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18314526/

10-13 00:57