如何使用await与Promise.all?两段异步代码执行效果是否一致?
两段JavaScript代码的执行逻辑完全不同
第一段代码:await Promise.all([a(), b()]);
- 执行时会同时调用
a()和b(),两个Promise任务并行启动 - 会等待这两个Promise都完成(若其中一个reject,会立即抛出该错误),最终返回一个包含两个Promise结果的数组
- 总等待时长是两个Promise中耗时更久的那个的时间
第二段代码:await (a(), b());
- 这里用到了JavaScript的逗号运算符:先执行左边的
a(),等待它的Promise完成后,再执行右边的b() - 最终只会等待
b()的Promise完成,并且只返回b()的执行结果,a()的结果会被直接丢弃 - 总等待时长是
a()的耗时加上b()的耗时,两个任务是串行执行的
核心差异总结
- 执行模式:第一段是并行执行两个Promise,第二段是串行执行
- 返回值:第一段返回两个结果的数组,第二段仅返回
b()的结果 - 耗时:第一段耗时取两者最大值,第二段耗时是两者之和
内容的提问来源于stack exchange,提问作者Hyeongrok
相关产品推荐
相关产品推荐

