gpt4 book ai didi

javascript - 如何使用 Promise.all 解构动态数量的异步调用的结果

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

我需要通过 Promise.all 并行进行未知数量的异步调用。类似这样的东西:

let externalCalls = [call1()];
if (someCondition1) {
externalCalls.push(call2());
}
if (someCondition2) {
externalCalls.push(call3());
}

然后 externalCalls 将被传递给 Promise.all 因此它们可以并行运行。

理想情况下,我想对结果进行解构,这样我就可以按名称引用结果,即

const [call1, call2, call3] = await Promise.all(externalCalls);

我知道 call1 会一直在那里,但我不知道 call2call3 是否会在那里。所以我想定义动态调用 await Promise.allconst 结果以具有正确的属性,这可能吗?或者我是否卡住了一个长度未知的通用结果数组,然后必须检查结果中的每个项目以查看是哪个调用生成的?

最佳答案

一方面,您已经知道哪些调用是 .push()ed 到 externalCalls,基于 someCondition1

但也许以不同的方式构建 externalCalls 会更好,这样它的长度始终相同:

const conditions = [true, someCondition1, etc]
const calls = [call1, call2, etc]
const externalCalls = conditions.map(
(c, i) => c ? calls[i]() : Promise.resolve(null))
const [result1, result2, etc] = await Promise.all(externalCalls)

关于javascript - 如何使用 Promise.all 解构动态数量的异步调用的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55992223/

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