2012-08-27 152 views
1

可以说我有下面的代码:延迟函数传入when()异步或同步运行?

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

我想知道,如果这些功能都将被立即调用,如果jQuery将打电话给他们纷纷为他们解决了。根据文档看来,它们将异步运行:

在多个Deferred对象传递给jQuery.when的情况下,该方法从跟踪聚合状态的新“主”Deferred对象返回Promise已经通过的所有延期债券。

...

在其中Deferreds之一被拒绝多重Deferreds情况下,jQuery.when立即触发其主延迟的failCallbacks。请注意,在这一点上,某些延期付款可能仍未解决。

我读这是FUNC1,FUNC2和FUNC3都会得到立即解雇,并返回将处理调用适当的回调函数主Deferred对象,但只要第1拒收(方式)检测fail()回调将立即触发。我对这个问题的理解是否正确或者是否存在我缺少的东西?

+0

待办事项'FUNC1()','funct2()'和'FUNC3()''返回对象Deferred'?这些函数将在'$ .when()'被调用之前被调用,因为你自己调用它们。 –

+0

是的,这只是一个假设,但假设他们都会返回一个承诺(),并且他们都将被解决。 – bittersweetryan

回答

1

你的理解是正确的。

所有Deferred对象解决了done回调才会被调用。

在另一方面,fail回调将尽快任何Deferred对象被拒绝所谓的不管对方Deferred传递给$.when()状态。

换言之,它就像一个短路AND运营商。