ema*_*rel 3 javascript asynchronous promise
Promise.all() 在 Javascript 中是顺序运行还是并行运行?
例如:
const promises = [promise1(), promise2(), promise3()]
Promise.all(promises)
.then(data => {
// whatever
});
Run Code Online (Sandbox Code Playgroud)
是promise1()在转到promise2() 之前执行并解析,还是promise1()、promise2()、 和promise 3()全部同时并行运行?我会假设浏览器中的 Node、Javascript 是单线程的,因此它们不会并行运行?
Rah*_*obe 11
JavaScript 是单线程应用程序。但是,异步调用使您不会被该调用阻止。这在进行 REST API 调用时特别有用。例如,您promise1()可以进行 REST API 调用,在等待结果之前,可以从 进行另一个 REST API 调用promise2()。因此,这种伪并行性是通过不等待 API 服务器执行任务并并行向相同或不同 API 端点触发多个此类调用来实现的。这允许您的代码继续执行不依赖于承诺解析的部分。
所以,是的,promise1(),promise2(),promise3()可以说是在这方面并行运行。并且之前有机会promise2()得到解决promise1()等等。该函数Promise.all()等待提供给它的所有承诺履行或至少其中一项失败。
观看 Jake Archibald 的这段视频,了解有关 Javascript 事件循环的更多信息。
Promise.all不会让你的承诺同时进行。
Promise.all根本不会兑现你的承诺。
所做Promise.all的,只是等待所有的承诺完成。
实际执行的代码行是这样的:
const promises = [promise1(), promise2(), promise3()]
Run Code Online (Sandbox Code Playgroud)
假设您的 Promise 进行 HTTP 调用:
promise1()已执行 -> 1 个正在进行的 HTTP 调用
promise2()已执行 -> 2 个正在进行的 HTTP 调用
promise3()已执行 -> 3 个正在进行的 HTTP 调用
然后过了一段时间,这些承诺以未确定的顺序完成。
这 3 个 HTTP 调用可以同时完成,但在您的代码中,您将有 3 个顺序完成。因此,您可以使用它Promise.all来确保仅当所有 Promise 完成时才执行回调。
请记住,您的环境中可以拥有的并行 HTTP 连接数量是有限的,请查看以下内容:https: //stackoverflow.com/a/985704/7327715
| 归档时间: |
|
| 查看次数: |
7552 次 |
| 最近记录: |