gpt4 book ai didi

javascript - 如何同步解析一系列 es6 Promise?

转载 作者:行者123 更新时间:2023-12-03 01:25:11 24 4
gpt4 key购买 nike

我有一个来自库的函数,它返回一个 promise 。我需要多次运行这个函数,但每次迭代都必须等到上一个任务完成。

我的假设是我可以做到这一点:

promiseReturner(1)
.then(promiseReturner(2)
.then(promiseReturner(3)
.then(...)

可以使用循环来简化:

var p = Promise.resolve();
for (var i=1; i<=10; i++) {
p = p.then(promiseReturner(i));
}

但是,当我这样做时,链中的每个 promise 都会同时执行,而不是像 .then() 似乎暗示的那样一个接一个地执行。显然,我错过了有关 Promise 的一些基本知识 - 但在阅读了几篇教程和博客文章后,我仍然迷失了方向。

Here's a codepen I wrote up to demonstrate my attempt .

最佳答案

您的“非循环”解决方案也不应该起作用。您必须将函数传递给.then,而不是 promise :

var p = Promise.resolve();
for (var i=1; i<=10; i++) {
(function(i) {
p = p.then(function() {
return promiseReturner(i);
});
}(i));
}

如果该函数返回一个 promise ,那么您就会得到链式效应。

有关 MDN 上的 promise 的更多信息.

<小时/>

可以使用 let (和箭头函数)进行简化:

var p = Promise.resolve();
for (let i=1; i<=10; i++) {
p = p.then(() => promiseReturner(i));
}

或者.bind (即 ES5):

var p = Promise.resolve();
for (var i=1; i<=10; i++) {
p = p.then(promiseReturner.bind(null, i));
}

关于javascript - 如何同步解析一系列 es6 Promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28683071/

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