125*_*748 3 jquery jquery-deferred
最近我询问了如何触发可变数量的jquery get()请求,并且我收到了这段代码作为一个非常有效的工作解决方案:
var d = new $.Deferred();
var promise = d.promise();
var results = [];
for (var i = 0; i < 5; i++) {
(function(i) {
promise = promise.then(function() {
return $.ajax('/echo/json/', {
data: {
json: JSON.stringify({foo: i})
}
}).done(function(data) {
results[i] = data;
});
});
}(i));
}
promise.done(function() {
console.log(results);
});
d.resolve();
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个解释,它是如何与done()每个附加的多个s一起工作的promise.then(),然后最终done()附加到promise本身.这是一个承诺(从我所理解的是一种特殊类型的延迟本身)可以完成,那么延期本身也可以完成吗?如果它不在循环中,那么这个语法会是什么样的,例如,连续三个ajax请求?试着试着理解它.谢谢!
如果你有一个延迟对象数组,你可以使用它来实际处理它们when并apply获得$.done()它们,然后使用它们:
$.when.apply($, deferredArray).done(function() {
for (var i = 0; i < arguments.length; i++) {
//arguments[i] is the return of the singular done() statement
}
});
Run Code Online (Sandbox Code Playgroud)
当您不知道正在使用多少个延迟对象时,这种方法很有效.