等待多个延迟对象完成

时间:2013-01-29 01:46:22

标签: javascript jquery jquery-deferred

在等待多个延迟对象完成时,为什么:

$.when(tasks).then(function() {
    document.write("Completed all requests." + "<br/>");
});

立即执行

$.when.apply(null, tasks).then(function () {
    document.write("Completed all requests." + "<br/>");
});

等待任务完成。

1 个答案:

答案 0 :(得分:11)

when函数不接受延迟数组。相反,您将每个延迟传递为单独的参数。这正是apply正在为你做的事情。

传递给null的{​​{1}}只是因为那是apply所期望的:第一个参数是函数的上下文应该在被调用时设置的,第二个参数是参数总是一个数组,它将被扩展,以便调用该函数,就像数组中的所有项都作为单独的参数传入一样。

因为apply的目的,它所调用的上下文没有区别,when与其他任何内容一样有效。我更喜欢传递jQuery本身:

null

因为我认为它看起来更干净,但那只是我。它没有任何区别。


如果您的浏览器支持本机承诺(或者您正在使用a polyfill),则可以使用其$.when.apply($, tasks).then(function () { // Whatever }); 方法,直接接受一系列承诺:

all