ECMAScript异步
JavaScript 异步主题的关系地图,串联同步异步、事件循环、Promise 与 async/await。
#type / synthesis
#status / growing
#resource / javascript
#resource / ecmascript
[!info] related notes
- 所属 MOC: ecmascript-moc, javascript-moc
- 原子概念: 同步与异步, js的定时器和事件监听, js事件循环, Promise, promise链, async / await, 异步错误处理
- 运行时差异: js-event-loop
- Node 事件驱动: event-emitter
ECMAScript异步
这篇笔记不重复定义每个术语,只负责解释这组概念为什么要放在一起学,以及应该按什么顺序读。
这组笔记在回答什么
JavaScript 需要处理很多不会立刻得到结果的任务:定时器、用户事件、网络请求、文件 I/O、Promise 回调。
所以这组主题真正要解决的是两件事:
- 未来结果如何表示
- 未来任务何时恢复执行
推荐阅读顺序
概念分工
执行直觉
- 同步与异步 先区分什么必须现在做、什么可以以后做
- js的定时器和事件监听 负责给出最直观的异步入口
调度规则
- js事件循环 解释同步代码、宏任务、微任务如何衔接
- js-event-loop 单独比较浏览器和 Node.js 的宿主差异
结果表达
- Promise 用对象表示未来结果
- promise链 解释结果如何在多个步骤之间传递
- async / await 解释 Promise 如何改写成更接近同步的表达
- 异步错误处理 解释异步场景的错误边界
最容易混淆的点
- 异步不等于并行,重点是延后和调度
- Promise 不是同步结果,而是未来结果的占位
await暂停的是当前async函数,不是整个线程- 涉及输出顺序时,最后仍要回到 js事件循环
相关跳转
- Promise / 异步函数桥接页:ecmascript-promises-and-async
- 浏览器与 Node.js 差异:js-event-loop