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"};
这个声明中的内容是什么?我猜这是语法,但我就是不能指望它。
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
,但响应andsbe
的逆状态。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()
响应承诺一样响应延迟。
正如我所说,我认为这会奏效。它完全未经测试。