延迟函数是在()异步或同步运行时传递的吗?

时间:2012-08-27 13:00:27

标签: jquery

假设我有以下代码:

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

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

  

如果将多个Deferred对象传递给jQuery.when,该方法将从新的“master”Deferred对象返回Promise,该对象跟踪已传递的所有Deferred的聚合状态。

     

...

     

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

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

1 个答案:

答案 0 :(得分:1)

您的理解是正确的。

仅在所有 done个对象解析后才会调用Deferred回调。

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

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

相关问题