假设我有以下代码:
$.when(func1(),funct2(),func3())
.done(...)
.fail(...);
我想知道如果jQuery在解决之后连续调用它们,是否会立即调用这些函数。根据文档,它们似乎将异步运行:
如果将多个Deferred对象传递给jQuery.when,该方法将从新的“master”Deferred对象返回Promise,该对象跟踪已传递的所有Deferred的聚合状态。
...
在多个Deferreds案例中,其中一个Deferreds被拒绝,jQuery.when立即触发其主Deferred的failCallbacks。请注意,此时某些延迟可能仍未解决。
我读这个的方式是func1,func2和func3都将立即被触发,并且返回的主延迟对象将处理调用正确的回调函数,但是每当检测到第一个reject()时失败( )回调会立即开火。我对此的理解是正确的还是我遗漏了哪些东西?
答案 0 :(得分:1)
您的理解是正确的。
仅在所有 done
个对象解析后才会调用Deferred
回调。
另一方面,只要任何 fail
对象被拒绝,就会调用Deferred
回调,而不管其他Deferred
的状态如何传递给$.when()
。
换句话说,它就像一个短路AND
运算符。