$ .when,apply()和$ .done()如何在此函数中进行交互?

125*_*748 3 javascript ajax jquery jquery-deferred

不久前,SO用户为我编写了这个函数,以返回可变数量的jQuery $.get()请求.第一部分是非常简单的,但是会有人elplain如何$.when(),apply()以及$.done()在互动.我一般不了解,但非常具体地说他们是如何访问$.get()返回的延迟对象.

function getHTML(qty_of_gets) {

   var dfdArr = [],
       i = 1;

   while (i <= qty_of_gets) {
       dfdArr.push($.get("get_test_" + i + ".php"));
       i++;
   }

   $.when.apply(null, dfdArr).done(function () {

       for (var i = 0; i < arguments.length; i++) {

           $("#content").append(arguments[i][0]);

       }

   });
}
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 11

$.when返回一个新的promise,所以$.when().done()只需调用.done返回的promise $.when.

.apply允许您使用数组中的参数调用函数,而不是单独传递它们.所以

$.when.apply(null, dfdArr)
Run Code Online (Sandbox Code Playgroud)

(几乎*)相当于

$.when(dfdArr[0], dfdArr[1], dfdArr[2], ...);
Run Code Online (Sandbox Code Playgroud)

每个元素dfdArr都是一个承诺.


*除了this函数内部的值.