Skip to content
字数
446 字
阅读时间
2 分钟

五种在循环中使用 async/await 的方法 - 知乎

如何在 JS 循环中正确使用 async 与 await - 掘金

Promise.all 是并发的吗

promise.all 是并发
并发和并行

并行是指同一时间同时执行多个任务;并发是指两个或多个事件在同一时间间隔发生。

promise 和 eventloop 有很大的联系,如果单单从 event loop 的角度来看,传入给 promise.all 的所有 promise 都不会进入 micro task 队列而是将执行结果放入 micro task 队列 (也就是 new Promise 的代码会按照词法上下文的顺序执行而 then 的代码会放入 micro task 队列里面),从这一点出发那么 promise.all 就只是一个异步操作而已。(这里强调一下异步指的是不按照词法上下文的顺序执行而非同一时间执行多个任务)。

但是,js 引擎用的是 c++ 写的,js 是单线程指的是运行环境下的单线程,浏览器下可以单独开 webworker,node 下可以开子线程;单单从 "js 是单线程的 " 这一说法得出结论是不可靠的

js 引擎对 promise.all 做了优化,可能真的多开了线程来单独处理也不是不可能,使用 promise.all 来替代 for 循环是一种执行效率提升很明显的操作

all 和 allSettled

当有多个彼此不依赖的异步任务成功完成时或者或者您总是想知道每个 promise 的结果时,通常使用 Promise.allSettled()
当多个请求之间有相互依赖,并且有一个 promise reject 时立即结束,通常使用 Promise.all()

贡献者

The avatar of contributor named as jiechen jiechen

页面历史

撰写