gpt4 book ai didi

javascript - 如何推送到 Promise.all(Array)

转载 作者:行者123 更新时间:2023-11-29 19:00:19 24 4
gpt4 key购买 nike

我认为原生 promise 实现不可能做到这一点,但这是我想要的基本想法:

const promises = [
getSomething(),
getSomethingElse(),
];

// combine promises
const alldone = Promise.all(promises);

// Add a promise after the previous ones have started
promises.push(getAThirdThing());

// everything, including `getAThirdThing` is done
await allDone;

实际上,Promise.all() 并不关心我将某些内容推送到 promises 数组。

有没有类似的模式可以完成同样的事情?具体来说,添加其他要等待的 promise ,因为它们在当前 Unresolved promise 列表中是已知的,任意地,并且不需要以后添加任何 promise 。

我可以做这样的事情:

const promises = [
getSomething(),
getSomethingElse(),
];
const alldone = Promise.all(promises);
await Promise.all([alldone, getAThirdThing()]);

但我想在添加 getAThirdThing() 之前在 allDone 上调用 .then()

最佳答案

Promise.all 返回一个 Promise 本身,因此您可以连续调用 Promise.all:

let finished = Promise.all([...]);
finished = Promise.all([finished, someFunctionReturningAnotherPromise()]);
finished = Promise.all([finished, anotherFunctionReturningAPromise()]);
// etc...
// finally:
await finished;

但是,您不能做的是在awaitPromise 返回的promise 之后添加到Promise 链。所有

此外,如果在那种情况下,如果您想访问 所有 promise 的结果,事情会变得有点棘手,因为您最终会得到结果的嵌套数组(您可以使用类似 lodash.flattenDeep 的东西来标准化它们)。

关于javascript - 如何推送到 Promise.all(Array),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47275489/

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