当循环长度可变时,我对如何将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);
}