【问题标题】:Await sequentially or await a Promise.all [duplicate]顺序等待或等待 Promise.all [重复]
【发布时间】:2020-04-25 06:24:35
【问题描述】:

我有三个承诺,就像这样

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];

这三个 Promise 在创建时就启动了,所以我不认为会有并行化问题。这两种方法之间有什么问题吗?

【问题讨论】:

  • 我猜Promise.all() 一个是同步返回的,并且在你可以使用的函数之外await 同时另一个不会返回,直到所有 3 个await 的承诺还没有完成。
  • Promise.all() 本身是 promise 当其中一个(任何)失败时被拒绝。

标签: javascript asynchronous async-await


【解决方案1】:

有区别,但不是时间问题。

在版本一中,您将返回一个包含承诺结果的数组(或者更确切地说,您返回的是一个将解析为该数组的 Promise,因为 async 函数总是将返回结果包装在一个隐式 Promise 中) .

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

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

两个版本的错误处理可能也存在差异(如果这三个 Promise 中的任何一个被拒绝),但我对那里的交互有点生疏。

【讨论】:

  • 如果您展示了如何修改 v2 以返回值,将会很有帮助。
猜你喜欢
  • 2019-05-16
  • 2020-04-28
  • 2020-11-01
  • 2016-08-16
  • 2021-03-21
  • 2018-10-27
  • 2021-03-17
  • 1970-01-01
  • 2021-08-02
相关资源
最近更新 更多