gpt4 book ai didi

javascript - 串联执行原生js promise

转载 作者:数据小太阳 更新时间:2023-10-29 04:01:54 24 4
gpt4 key购买 nike

我必须为数组中的每个项目调用一些异步任务的 promise ,但我想连续执行这些任务。

Promise.all 仅在拥有一个合并 promise 列表但不按顺序调用它们的新 promise 时有用。

我如何使用标准的 promise api 来实现这一点,而无需第三方库,如 Q、bluebird....

最佳答案

您使用 .then() 链式 promise 带有返回另一个 promise 的回调。因此,假设您有三个函数 a、b 和 c,它们都返回一个 promise。您可以像这样链接它们(按顺序执行):

a().then(b).then(c).then(function(result) {
// all are done here
});

如果你正在处理一个数组并且你有一个 promise 返回函数 myFunc你想为数组中的每个项目调用,你可以使用标准的数组设计模式和 promises .reduce()像这样一次遍历数组中的一项:

var items = [...];

items.reduce(function(p, item) {
return p.then(function() {
return myFunc(item);
});
}, Promise.resolve());

事实证明,这实际上只是链接了一堆 .then()处理程序与第一个示例类似,但使用 .reduce() 的结构为你走阵。


从 ES2017 开始,你也可以像这样使用 async/await 串行处理数组:

async function processArray(arr) {
for (let item of arr) {
let result = await somePromiseReturningFunc(item);
// do something with result here before
// going on to next array item
}
return someFinalResult;
}

processArray(someArray).then(result => {
// done processing array here
}).catch(err => {
// handle error here
});

关于javascript - 串联执行原生js promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30445543/

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