• !MOC-异步编程体系
    • 事件循环
    • 消息队列
    • 宏任务和微任务
    • promise
    • async await
    • 生成器(Generator)

1. ​基础机制层

  • 1.1 事件循环 (Event Loop)​
    • 浏览器/Node.js 的事件循环模型差异(补充环境差异)
    • 执行栈 (Call Stack) 与任务队列的协作关系
  • 1.2 任务队列分层
    • 宏任务 (MacroTask)​
      • 常见类型:script(整体代码)、setTimeoutsetInterval、I/O 操作、UI 渲染、setImmediate(Node.js)
      • 调度规则:每个宏任务结束后会清空微任务队列
    • 微任务 (MicroTask)​
      • 常见类型:Promise.thenMutationObserverqueueMicrotaskprocess.nextTick(Node.js)
      • 优先级:微任务队列在渲染前清空,确保高优先级任务优先执行

2. ​异步编程范式

  • 2.1 回调模式 (Callback)​
    • 基础但易导致回调地狱(补充缺点)
    • 错误处理机制:try/catch 无法捕获异步错误(需补充错误优先回调)
  • 2.2 Promise
    • 状态机模型:pendingfulfilled/rejected(补充状态不可逆特性)
    • 链式调用与穿透机制(.then() 返回新 Promise)
    • 静态方法:Promise.all/race/allSettled/any
  • 2.3 Generator 与协程
    • 生成器函数:function*yield 的暂停/恢复机制
    • 与异步结合:通过手动调用 next() 或配合自动执行器(如 co 库)
    • 协程概念:单线程下的协作式多任务(补充与线程的对比)
  • 2.4 Async/Await
    • 语法糖本质:基于 Generator + Promise 的封装
    • 错误处理:try/catch 捕获异步异常(补充同步化错误处理优势)
    • 顶层 Await:ES2022 在模块中的支持

3. ​进阶与生态

  • 3.1 浏览器与 Node.js 差异
    • 浏览器:宏任务区分 requestAnimationFrame 与任务队列优先级
    • Node.js:libuv 引擎的 6 个任务阶段(如 pollcheck 等)
  • 3.2 性能与陷阱
    • 任务饥饿:微任务嵌套导致主线程阻塞(如递归调用 queueMicrotask
    • 渲染时机:宏任务与 requestAnimationFrame 的协作优化
  • 3.3 现代异步模式
    • 异步迭代器 (Async Iterators)​​:for await...of 遍历异步数据流
    • Web Workers​:多线程异步(补充与事件循环的关系)
    • AbortController​:取消异步操作(如取消 Fetch 请求)

4. ​可视化与调试

  • 4.1 工具辅助
    • 浏览器 Performance 面板分析任务调度
    • Node.js 的 --trace-event-categories 标志跟踪事件循环
  • 4.2 代码示例
    • 经典面试题解析(如 setTimeout vs Promise 执行顺序)
    • 手写简易 Event Loop 模拟器(理解调度逻辑)