[英]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.