1

可以说我有以下代码:

$.when(func1(),funct2(),func3())
 .done(...)
 .fail(...);

我想知道这些函数是否会立即被调用,如果 jQuery 会在它们被解析时连续调用它们。根据文档,它们似乎将异步运行:

在将多个 Deferred 对象传递给 jQuery.when 的情况下,该方法从一个新的“主” Deferred 对象返回 Promise,该对象跟踪它已传递的所有 Deferred 的聚合状态。

...

在多个 Deferred 的情况下,其中一个 Deferred 被拒绝,jQuery.when 立即为其主 Deferred 触发 failCallbacks。请注意,此时某些 Deferreds 可能仍未解决。

我读到的方式是 func1、func2 和 func3 都会立即被触发,并且返回的主延迟对象将处理调用正确的回调函数,但是每当检测到第一个拒绝()时,失败()回调将立即开火。我对此的理解是正确的还是有什么我遗漏的?

4

1 回答 1

1

你的理解是正确的。

只有当所有对象都被解析时done才会调用回调。Deferred

另一方面,fail一旦任何 Deferred对象被拒绝,回调就会被调用,而不管Deferred传递给的对象的状态如何$.when()

换句话说,它就像一个短路AND运算符。

于 2012-08-27T13:59:41.127 回答