2012-11-14 63 views
0
var promise = $.when(sba_dfd.promise(), sbb_dfd.promise(), sbc_dfd.promise(), sbd_dfd.promise(), sbe_dfd.promise()); 
if (sbf_dfd.state() || sbg_dfd.state() == "resolved") {promise.state()=="rejected"}; 

在這個聲明中worng是什麼?我想這是語法,但我不能把它放在手指上。如果推遲的狀態被解決,何時被拒絕

+0

'promise.state()==「rejected」'你可能意思是'promise.state()=「rejected」',但即使這樣也行不通。 '$ .when'返回一個promise對象,promise對象不能被手動解析或被拒絕,除非你有權訪問原始的延遲對象。 –

+0

解釋代碼背後的邏輯,我們可能會提出一種方法來實現它。 –

+0

它是這樣的:'var promise'是一批'divs',它必須被「解析」才能繼續。但是,如果'sbf'和'sbg'被「解析」,'var promise'應該失效,因此'被拒絕'。類似的東西。 – user1718397

回答

0

我認爲這可以通過一些反向解析邏輯來解決,即。響應於拒絕而解析的Deferred對象,並且反之亦然

首先一個函數來做到的反轉:

function inverse_resolve(promise) { 
    var dfrd = $.Deferred(); 
    promise.done(dfrd.reject).fail(dfrd.resolve); 
    return dfrd.promise(); 
} 

現在,我們可以組成一個相當傳統的when()表達,通常響應sbasbbsbcsbdsbe但到sbf倒數狀態, sbg

$.when(sba_dfd, sbb_dfd, sbc_dfd, sbd_dfd, sbe_dfd, inverse_resolve(sbf_dfd), inverse_resolve(sbg_dfd)).done(function() { 
    //do something 
}); 

爲了清楚起見,我在每種情況下都省略了.promise()。實際上,.promise()不是必需的,因爲.when()將以響應承諾的相同方式響應延遲。

正如我所說,我認爲這會奏效。它完全沒有經過測試。

相關問題