【发布时间】:2025-12-27 22:00:12
【问题描述】:
Promise.all() 在 Javascript 中是顺序运行还是并行运行?
例如:
const promises = [promise1(), promise2(), promise3()]
Promise.all(promises)
.then(data => {
// whatever
});
promise1() 是在进入 promise2() 之前执行和解析,还是 promise1()、promise2() 和 promise 3() 都同时并行运行?我会假设浏览器中的 Node、Javascript 是单线程的,因此它们不会并行运行?
【问题讨论】:
-
不,它们是异步的。单线程并不意味着它们同步或并行运行。单个线程仍然可以进行时间共享。
-
节点是用户代码中的单线程。如果你调用两个读取文件的promise,它们可以同时被读取。延续(结果)再次是单线程的。
-
Angular 不会(或不应该)影响 Promise 运行时语义
-
@Thankyou,这是真的,但我发现很难信任 zone.js。 Angular 依赖于 zone.js 提供的原生 Promises 的几个附加功能。尝试使用
--target ES2017或更高版本编写async函数,然后发现更改检测失败。 -
没有!
Promise.all()不运行任何东西。它聚合 Promise,其中每个 Promise 都是一个值的抽象。
标签: javascript asynchronous promise