【问题标题】:If deferred state is resolved, when is rejected如果延迟状态被解决,什么时候被拒绝
【发布时间】:2012-11-14 17:49:25
【问题描述】:
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"};

这句话的意思是什么?我猜是语法,但我就是不能指望它。

【问题讨论】:

  • promise.state()=="rejected" 你的意思可能是promise.state()="rejected",但即使这样也行不通。 $.when 返回一个 promise 对象,promise 对象无法手动解析或拒绝,除非您有权访问原始延迟对象。
  • 解释你的代码背后的逻辑,我们也许可以提出一种方法来完成它。
  • 它是这样的:var promise 是一批divs,必须是resolved 才能继续。但是如果sbfsbgresolved,则var promise 应该无效,因此rejected。类似的东西。
  • 您需要创建自己的延迟对象,您需要的控制权比承诺对象所能提供的更多。
  • 推迟声明所有var promise 承诺?

标签: jquery jquery-deferred


【解决方案1】:

我认为这可以通过一些逆解析逻辑来解决,即。为响应拒绝而解决的延迟对象,反之亦然

首先是一个函数来进行反转:

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

现在,我们可以编写一个相当传统的when() 表达式,它通常响应sbasbbsbcsbdsbe,但会响应sbf 和@987654329 的相反状态@。

$.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() 会以与响应承诺相同的方式响应 Deferreds。

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

【讨论】:

    猜你喜欢
    • 2019-04-17
    • 1970-01-01
    • 2012-09-05
    • 2011-08-15
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    相关资源
    最近更新 更多