gpt4 book ai didi

javascript - 从多个 promise 构造对象

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

我想从多个 promise 结果构造一个对象。这样做的唯一方法是这样的:

const allPromises = await Promise.all(asyncResult1, asyncResult2);
allPromises.then([result1, result2] => {
return {result1, result2};
})

更好的方法(尤其是在构造更多数据时)是这样,主要缺点是异步请求一个接一个地发生。

const result = {
result1: await asyncResult1(),
result2: await asyncResult2(),
}

有没有更好的方法来使用我正在等待的异步数据构造我的对象?

最佳答案

看到我的评论,有点不清楚 asyncResultasyncResult2 是什么,因为你的第一个代码块使用它们就好像它们是包含 promise 的变量(大概是为了事情 < em>已经 进行中),但是您的第二个代码块将它们作为函数调用并使用结果(大概是一个 promise )。

如果它们是包含 promise 的变量

...对于已经在进行中的进程,单独等待它们没有问题,因为它们已经在进行中:

const result = {
result1: await asyncResult1, // Note these aren't function calls
result2: await asyncResult2,
};

这不会让第二个等待第一个,因为它们可能在到达这部分代码之前就已经在进行中了。

如果它们是函数

...你需要调用,然后是,调用它们并使用结果 Promise.all 是一个不错的选择。这是一个调整:

const result = await Promise.all([asyncResult1(), asyncResult2()])
.then(([result1, result2]) => ({result1, result2}));

async 函数中使用 then 语法的罕见地方之一不一定是错误的选择。 :-) 或者,只需将 promise 保存到变量,然后使用上面的第一个选项:

const ar1 = asyncResult1();
const ar2 = asyncResult2();
const result = {
result1: await ar1,
result2: await ar2,
};

关于javascript - 从多个 promise 构造对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58414558/

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