
Promise 与 Event Loop 的联系与理解
Promise 与 Event Loop:分步深入指南 简介 JavaScript 是单线程语言,却要处理大量异步操作(如网络请求、定时器、用户交互等)。为了既不阻塞主线程、又能保证回调按预期顺序执行,语言和运行时共同提供了两套核心机制: Promise —— 代表一个“未来会结束”的异步操作,提供了状态管理、链式调用、错误传播等语义,是现代异步编程的基石 Event Loop(事件循环) —— JavaScript 运行时真正的调度中心,它决定了同步代码、Promise 回调(微任务)、setTimeout/IO 等(宏任务)到底在什么时机被推入调用栈执行 这两者紧密协作: Promise 的 .then / .catch / await 后续全部属于微任务(microtask) 微任务与宏任务(macrotask)在 Event Loop 中有严格的优先级:每执行完一个宏任务,必须先清空全部微任务,才会进行渲染并进入下一个宏任务 掌握 Promise 的状态机细节 + Event Loop 的微/宏任务执行顺序,就等于拿到了 JavaScript 异步世界的完整“时序地图” 执行顺序表 执行顺序 类型 典型代表 触发时机 同步代码(包含Promise executor) console.log、变量赋值、函数调用 立即执行 微任务(microtask) .then/.catch、await 后续、queueMicrotask、MutationObserver 当前宏任务结束后、渲染前全部清空 渲染(浏览器) 页面重绘、布局 微任务清空后(可能跳过) 宏任务(macrotask) setTimeout、setInterval、I/O、UI 事件 每轮 Event Loop 执行一个 Promise 核心机制 Promise 的三个状态 ...