组合jQuery承诺的最简单方法?

组合jQuery承诺的最简单方法?,jquery,promise,Jquery,Promise,在很多情况下,我需要积累多个jQuery承诺(动画、Ajax或“其他”),但我尝试的简单测试并没有等到所有承诺(或其中任何承诺)都完成: JSFiddle: 最糟糕的情况是,我本以为它会等到第一场比赛,然后把所有的盒子都变成灰色 为什么这样做没有达到预期效果 更新: 现在我知道jQuery正确地组合了多个元素的承诺,我注意到您也可以使用空jQuery对象的承诺来提供空承诺 e、 g 这是一个很好的早期返回值(例如,当根本没有动画启动时) 为什么这样做没有达到预期效果 因为apply接受一个数组作

在很多情况下,我需要积累多个jQuery承诺(动画、Ajax或“其他”),但我尝试的简单测试并没有等到所有承诺(或其中任何承诺)都完成:

JSFiddle:

最糟糕的情况是,我本以为它会等到第一场比赛,然后把所有的盒子都变成灰色

为什么这样做没有达到预期效果

更新: 现在我知道jQuery正确地组合了多个元素的承诺,我注意到您也可以使用空jQuery对象的承诺来提供空承诺

e、 g

这是一个很好的早期返回值(例如,当根本没有动画启动时)

为什么这样做没有达到预期效果

因为
apply
接受一个数组作为它的第二个参数,但是你要传递一个
Promise

由于
$(“.box”).promise()
返回一个在所有排队操作完成时解析的承诺,并且不是数组,因此不能将其与
apply
一起使用

您只需直接使用结果即可:

makePromises().then(/*...*/);

(A)沃尔夫准则:

$.when(makePromises()).then(/*...*/);

…也可以工作,但不需要间接寻址,除非您还有其他承诺需要与之结合。)

$。when(makepromissions())
/@A.Wolff:Arrgh!这么简单。我看到的示例使用
应用
来管理一系列承诺。这是错误的吗?
makePromise
返回单个承诺,而不是数组。因此,您不能使用
.apply
$。如果
也不必要(对于单个承诺)。然后(…)
@TrueBlueAussie:我发现这个问题很有教育意义。我不知道你能做你在
makepromissions
结尾所做的事。我的想法是,只有当您从中获得承诺的集合与您排队执行操作的集合相同时,它才会起作用。jQuery比这更好(大概是在幕后为我们收集和执行
$。酷+1表示
makepromissions()。然后(/*…*/)快捷方式。这些例子往往会跳过这样的小细节。
makePromises().then(/*...*/);
$.when(makePromises()).then(/*...*/);