gpt4 book ai didi

javascript - Promise.all 似乎立即解决

转载 作者:行者123 更新时间:2023-11-30 17:08:43 26 4
gpt4 key购买 nike

我发布了一个similar question related to Ember.RSVP.all ,但我发现其行为与 Promise.all 的行为相同。如果我通过单独提交违反了任何规则,请告诉我。

我正在尝试在 promise 链的中间使用 Promise.all。我的示例比我的使用简单得多,但它演示了这个问题。在 promise 链的中间,我有一组 promise,在链可以继续之前,所有这些都需要解决 - 这正是我所理解的 Promise.all 的用途。

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

我已经设置了一个 js fiddle 来以我能想到的最佳方式进行演示:

请注意,First 和 Second 几乎同时解析,Second 应该在 1s promise 返回之后。第三和第四如预期。

http://jsfiddle.net/vqut9zy2/

fiddle 代码如下所示:

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

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

HTML

<div id="first">First</div>
<div id="onepointfive">One point five</div>
<div id="second">Second</div>
<div id="third">Third</div>
<div id="fourth">Fourth</div>

最佳答案

您需要先将 jQuery 的 deferred 转换为 promise。

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

http://jsfiddle.net/evilbuck/vqut9zy2/3/

关于javascript - Promise.all 似乎立即解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27429508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com