













Promise 的本质可以概括为一句话:
Promise 是一个“异步任务的状态容器 + 回调队列管理器”。
它并不让异步变成同步,而是把“未来才会知道的结果”抽象成一个对象,让你可以用统一的方式去处理成功、失败和链式调用。
Promise 围绕三点:
状态机(三种状态)
保存异步结果(值 / 原因)
收集回调,并在合适时机统一触发
关键规则:
初始状态:pending
一旦从 pending → fulfilled / rejected,状态不可再改变
同一个 Promise 永远不会同时触发 then和 catch
用一个简化模型理解(非源码):
核心点:
resolve / reject改变状态回调先存起来(队列)
若异步完成后才添加回调,仍要能触发 → 所以要用数组收集
它的职责:
注册成功 / 失败回调
返回一个新的 Promise(实现链式调用)
处理返回值(普通值 / Promise / thenable)
关键点:
then 永远返回新 Promise
回调是异步执行的(微任务)
返回值会决定下一个 Promise 的状态
输出:
原因:
Promise 的 then/catch/finally回调
→ 被设计成 微任务(Microtask)
在事件循环中:
先执行同步代码
再执行微任务
再执行宏任务(setTimeout 等)
本质是:
每一次 then:
返回新的 Promise
上一个 Promise 的结果 → 传给下一个 onFulfilled
如果返回的是一个 Promise:
则:
等待该 Promise 完成
再决定下一个 then 的状态
回调地狱:
Promise 的做法:
把“下一步要做什么”从嵌套变成返回值和队列
用统一接口(then/catch)管理成功和失败
本质不是“更异步”,而是:
把异步控制流结构化
**Promise 内部维护一个状态机和回调队列;
异步操作完成后变更状态并执行回调;
then 返回新 Promise,使链式调用和统一错误处理成为可能。**
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。