确定使用jQuery延迟的javascript循环中触发的可变数量的异步进程的分辨率



当循环长度可变时,我对如何将jQuery $.deferred对象应用于异步进程循环感到困惑。以下是我目前的尝试。由于循环中的进程是异步的,因此循环将完成,并且 main 中的延迟对象将在循环中触发的所有异步进程解析之前解析。另一方面,当每个解决方案完成时,我将从异步进程内的延迟对象触发可变数量的分辨率,留下相当多的会计来确定它们何时全部完成。

function asyncProcess(someVariable) {
    var dfd = $.Deferred();
    //Some Code
    dfd.resolve();
    return dfd.promise();
}

function main() {
    var dfd = $.Deferred();
    for (i = 0; i < variableInteger; i++) {
        asyncProcess(someVariable);
        dfd.resolve();
    }
    return dfd.promise();
}

有谁知道这种情况通常是如何处理的?

使用 $.when() 创建一个新的承诺,当所有承诺都解决或任何一个承诺被拒绝时,该承诺将被解析。

function asyncProcess(someVariable) {
    var dfd = $.Deferred();
    //Some Code
    dfd.resolve();
    return dfd.promise();
}

function main() {
    var prmis = [];
    for (i = 0; i < variableInteger; i++) {
        prmis.push(asyncProcess(someVariable));
    }
    return $.when.apply($, prmis);
}

最新更新