延迟的jquery中的多个done() - 它是如何工作的?

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请求?试着试着理解它.谢谢!

dan*_*ith 7

如果你有一个延迟对象数组,你可以使用它来实际处理它们whenapply获得$.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)

当您不知道正在使用多少个延迟对象时,这种方法很有效.