在等待多个延迟对象完成时,为什么:
$.when(tasks).then(function() {
document.write("Completed all requests." + "<br/>");
});
立即执行
$.when.apply(null, tasks).then(function () {
document.write("Completed all requests." + "<br/>");
});
等待任务完成。
答案 0 :(得分:11)
when
函数不接受延迟数组。相反,您将每个延迟传递为单独的参数。这正是apply
正在为你做的事情。
传递给null
的{{1}}只是因为那是apply
所期望的:第一个参数是函数的上下文应该在被调用时设置的,第二个参数是参数总是一个数组,它将被扩展,以便调用该函数,就像数组中的所有项都作为单独的参数传入一样。
因为apply
的目的,它所调用的上下文没有区别,when
与其他任何内容一样有效。我更喜欢传递jQuery本身:
null
因为我认为它看起来更干净,但那只是我。它没有任何区别。
如果您的浏览器支持本机承诺(或者您正在使用a polyfill),则可以使用其$.when.apply($, tasks).then(function () {
// Whatever
});
方法,直接接受一系列承诺:
all