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"};
这句话中穿了什么?我想这是语法,但我就是不能把手指放在上面。
我认为这可以通过一些反向解析逻辑来解决,即。 响应拒绝而解析的延迟对象,反之亦然。
首先做一个函数来反转:
function inverse_resolve(promise) {
var dfrd = $.Deferred();
promise.done(dfrd.reject).fail(dfrd.resolve);
return dfrd.promise();
}
现在,我们可以编写一个相当传统的when()
表达式,它通常响应sba
、sbb
、sbc
、sbd
、sbe
但响应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()
会以与响应承诺相同的方式响应延期。
正如我所说,我认为这将奏效。它完全未经测试。