我有三个诺言
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];
这三个承诺在创建时就已经开始,所以我不认为会出现并行化问题。这两种方法之间有什么陷阱吗?
答案 0 :(得分:0)
有所不同,但这不是时机。
在第一个版本中,您将返回一个promise结果的数组(或者,您将返回一个将解析为该数组的Promise,因为async
函数始终将返回结果包装在隐式中保证)。
在第二版中,您仍在返回承诺,而不是它们已解决的值。要返回结果,您需要使用类似以下内容的
:let result = await Promise.all([promiseOne, promiseTwo, promiseThree]);
return result;
这两个版本的错误处理可能也有所不同(如果这三个Promise中的任何一个都被拒绝),但是我对那里的交互有些生疏。