繁体   English   中英

Ember.RSVP.all似乎立即解决

[英]Ember.RSVP.all seems to resolve immediately

我真的希望我正在做一些愚蠢的事情,但是我似乎找不到。

我正在尝试在承诺链中间使用Ember.RSVP.all。 我的示例比我使用的示例简单得多,但它演示了该问题。 在承诺链的中间,我有一组承诺,在链继续之前,所有这些承诺都需要解决-正是我对RSVP.all的理解。

不幸的是,当我返回RSVP.all对象时,链中的下一个诺言将立即运行,而无需等待诺言传递给all()。

我设置了一个js小提琴,以我能想到的最佳方式进行演示: http : //jsfiddle.net/3a9arbht/3/

请注意,First和Second几乎都几乎同时解决,这时Second应该在1s承诺再次出现之后。 第三和第四项符合预期。

小提琴代码如下所示:

function delayAjax(delay) {
    return Ember.$.ajax({
        url: '/echo/json/',
        data: {
            json: '',
            delay: delay,
        }
    });
}

delayAjax(1).then(function() {
    Ember.$('#first').addClass('red');
    var proms = [delayAjax(1), delayAjax(1)];
    return Ember.RSVP.all(proms)
}).then(function() {
    Ember.$('#second').addClass('red');
    return delayAjax(1);
}).then(function() {
    Ember.$('#third').addClass('red');
    return delayAjax(1);
}).then(function() {
    Ember.$('#fourth').addClass('red');
});

根据对另一个问题的回答进行回答。 看起来$.ajax响应确实是“可以”的,但它是jQuery延迟对象,而不是Promise。 我不清楚他们为什么不能一起玩,但是解决方案只是将ajax调用转换为promise:

function delayAjax(delay) {
    return Promise.resolve($.ajax({
        url: '/echo/json/',
        data: {
            json: '',
            delay: delay,
        }
    }));
}

使用有效的小提琴: http//jsfiddle.net/evilbuck/vqut9zy2/3/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM