2012-11-14 39 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()将以响应承诺的相同方式响应延迟。

正如我所说,我认为这会奏效。它完全没有经过测试。

相关问题