2012-08-27 105 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運營商。