【问题标题】:How to know when asynchronous functions finish如何知道异步函数何时完成
【发布时间】:2013-08-19 13:04:38
【问题描述】:

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

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 的所有调用都完成后才能继续?

【问题讨论】:

    标签: javascript jquery jquery-deferred


    【解决方案1】:
    1. 回调传递给asyncFunc
    2. 回调中,有一个基于things.length的计数器
    3. 计算回调被调用了多少次
    4. 如果计数器指示更多,结束回调
    5. 如果计数器指示这是最后一次,则继续调用

    例如回调

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

    【讨论】:

    • 啊,很好。我已经在asyncFunc 中有一个回调,所以我只是在当前回调的末尾添加了额外的回调调用。无论如何,您能否让您的答案显示整个工作代码以供新人发现?
    猜你喜欢
    • 2015-10-22
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 2014-03-27
    • 1970-01-01
    相关资源
    最近更新 更多