2014-02-14 60 views
0

我正在使用jQuery的承諾。如何在所有承諾解決後執行回調?

我有一個場景,我有兩個承諾。

如果promise1拒絕或解決,那麼system1應分別拒絕或解析。

如果promise2拒絕或解決,system2應該解決。

函數X應該在兩者都解決並且system1和system2都解決後調用。

我想:

var dp = $.when(promise1, promise2); 
dp.done(function(one,two){ 
    X(); 
}).fail(function(){ 
    // promise1 might have not settled as of yet. 
    Should call X or not ? 
}); 

但只要承諾的一個失敗返回。所以我的promise1在我的失敗被調用的時候沒有解決。

我該怎麼做?

+0

您希望兩個承諾都能運行結果,並且在兩個完成後都想運行X()方法。這是你想要的嗎? –

+0

@Basha請參閱編輯的問題。我真的想讓X被稱爲iff promise1已解決,但只有在兩個承諾都已解決之後。 –

回答

0

該行爲完全按照文檔:您的問題的答案也在文檔中爲斜體

在多Deferreds情況下Deferreds之一被拒絕, jQuery.when立即觸發對於其主站的failCallbacks 推遲。請注意,有些延遲仍可能在 這一點上沒有解決。 如果您需要對此 大小寫進行額外處理,例如取消所有未完成的ajax請求,您可以在關閉時保留 對底層jqXHR對象的引用,並且在failCallback中檢查/取消它們。

+0

我試過「當」爲我的解決方案,但無法應用它。可能是錯的。我對承諾很陌生。 「什麼時候」行爲正確,我並不矛盾。我想知道我如何解決我的問題(有或沒有)? –

+0

[fiddle](http://jsfiddle.net/rD4bE/)給出了一個例子..你可以在你的'fail'回調中調用'req2.abort()'。 – jacquard

相關問題