依次等待或等待Promise.all

时间:2020-01-07 17:51:19

标签: javascript asynchronous async-await

我有三个诺言

const promiseOne = factoryOne.get();
const promiseTwo = factoryTwo.get();
const promiseThree = factoryThree.get();

需要从函数中返回。之间有什么区别

return [await promiseOne, await promiseTwo, await promiseThree];

await Promise.all([promiseOne, promiseTwo, promiseThree])
return [promiseOne, promiseTwo, promiseThree];

这三个承诺在创建时就已经开始,所以我不认为会出现并行化问题。这两种方法之间有什么陷阱吗?

1 个答案:

答案 0 :(得分:0)

有所不同,但这不是时机。

在第一个版本中,您将返回一个promise结果的数组(或者,您将返回一个将解析为该数组的Promise,因为async函数始终将返回结果包装在隐式中保证)。

在第二版中,您仍在返回承诺,而不是它们已解决的值。要返回结果,您需要使用类似以下内容的

let result = await Promise.all([promiseOne, promiseTwo, promiseThree]);
return result;

这两个版本的错误处理可能也有所不同(如果这三个Promise中的任何一个都被拒绝),但是我对那里的交互有些生疏。