【发布时间】:2019-05-22 06:06:04
【问题描述】:
我正在尝试并行/同时运行几个异步函数。
我找到了两种解决方案,但不知道它们之间的区别。他们要么使用 Promise.all 要么使用添加符号。
如果一个函数抛出异常,我也看不出检查结果的意义。
await Promise.all([asyncFunction01(), asyncFunction02()])
const [p1, p2] = await Promise.all([asyncFunction01(), asyncFunction02()])
const p1 = asyncFunction01()
const p2 = asyncFunction02()
await p1 + await p2
const p1 = asyncFunction01()
const p2 = asyncFunction02()
const result = await p1 + await p2
在我看来,它们的运行方式都一样。它们都并行运行,并且在抛出错误的情况下快速失败。我喜欢第三个选项,因为它看起来更整洁。
那么有什么区别呢?我错过了什么吗?
【问题讨论】:
-
标题具有误导性。你不添加承诺。等待一个承诺会产生已解决的承诺的价值,这不是一个承诺。
-
仅就异步任务的“并行性”而言,这些块确实是等价的。然后是返回值的明显区别+最容易阅读/更具语义意义等,但这些都是意见。
-
@axiac 你是对的。我很高兴编辑它。有什么建议吗?
标签: javascript node.js ecmascript-6 es6-modules