Javascript $.when、apply()和$.done()如何在此函数中交互?
不久前,一位SO用户为我编写了此函数,以返回数量可变的jQueryJavascript $.when、apply()和$.done()如何在此函数中交互?,javascript,jquery,ajax,jquery-deferred,Javascript,Jquery,Ajax,Jquery Deferred,不久前,一位SO用户为我编写了此函数,以返回数量可变的jQuery$.get()请求。第一部分非常简单,但有人会告诉我们,$.when()、apply()和$.done()是如何相互作用的。我一般不理解,但非常具体地理解他们是如何访问$.get()返回的延迟对象的 function getHTML(qty_of_gets) { var dfdArr = [], i = 1; while (i <= qty_of_gets) { dfdArr.pu
$.get()
请求。第一部分非常简单,但有人会告诉我们,$.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]);
}
});
}
函数getHTML(获取的数量){
var dfdArr=[],
i=1;
while(i$.when
返回一个新的承诺,所以$.when().done()
只调用.done
对$.when
返回的承诺
允许您使用数组中的参数调用函数,而不是单独传递参数
$.when.apply(null, dfdArr)
(几乎*)相当于
$.when(dfdArr[0], dfdArr[1], dfdArr[2], ...);
dfdArr
中的每个元素都是承诺
*除了函数中的值之外,此值。代码创建一个表示AJAX请求的延迟数组(dfdArr
),并在中填充
之后,apply
在$上使用。当
时,所有这些延迟都作为参数传递给它。这会产生返回承诺的效果,当所有初始延迟都成功时,即当所有AJAX请求都返回时,该承诺就会完成
换句话说,调用apply
相当于编写程序
$.when(dfdArr[0], ..., dfdArr[qty_of_gets - 1]).done(...);
$.get()
返回一个延迟对象。在这一行中,您创建了一个包含延迟实例的数组,每个延迟实例对应一个发生的请求:
dfdArr.push($.get("get_test_" + i + ".php"));
$。when()
接受延迟对象列表并返回其自己的延迟对象。当您提供给它的所有延迟对象都已解析时,它也会解析。通常情况下,这类似于:
$.when(dfd1, dfd2).done(function (dfd1Result, dfd2Result) {
// The parameters from dfd1.done and dfd2.done are here in dfd1REsult, dfd2Result
}
我们不想使用列表,我们想使用数组。这就是.apply()
的作用。这允许您使用延迟数组
现在,我们的回调函数不知道它将有多少个结果,因此显式列出它们是没有意义的。我们基本上通过查看参数数组来获得一个结果数组,该数组存在于任何函数中。谢谢。为什么“几乎”呢在括号中?传递给.apply
的第一个参数是该
在函数中引用的值。$。when.apply(null…)
表示此
将默认为窗口
对象。when(…)
此
将引用$
,即jQuery。这可能会对实际使用此
的函数产生巨大影响。