Promise 生命周期核心是状态单向不可逆:Pending → Fulfilled/Rejected,一旦 settled 则永久锁定;then/catch/finally 仅监听不干预状态;已定型 Promise 的回调直接返回缓存值;链式调用生成新 Promise。

Promise 的生命周期管理核心在于状态的单向流转和不可逆性——它从 Pending 开始,只能转向 Fulfilled 或 Rejected,且一旦 settled(已定型),状态永久锁定。
状态只能走一次:Pending → Fulfilled/Rejected
Promise 创建时立即进入 Pending 状态,此时异步任务正在执行,但结果未知。resolve() 或 reject() 被调用后,状态立刻切换并固化,后续再调用 resolve/reject 无效,也不会触发额外回调。
- 比如发起一个 fetch 请求,请求发出瞬间 Promise 就是 Pending;收到响应且 HTTP 状态码正常,自动 resolve → Fulfilled;若网络中断或返回 5xx,自动 reject → Rejected
- 手动 new Promise 时,若 executor 函数里多次调用 resolve,只有第一次生效,其余被忽略
注册回调不改变状态,只响应状态
then()、catch()、finally() 都是“监听器”,它们不干预 Promise 当前状态,只在状态确定后按规则执行:
- then(onFulfilled, onRejected):两个参数分别处理 Fulfilled 和 Rejected,任一参数可省略
- catch(fn) 等价于 then(null, fn),专捕 Rejected
- finally(fn) 无论什么状态都会执行,常用于清理操作(如关闭 loading)
已定型 Promise 不会重新触发回调
一旦 Promise 进入 Fulfilled 或 Rejected,后续对它的 then/catch 调用仍能拿到结果,但不是“重跑”逻辑,而是直接同步返回缓存值:
- 例如 let p = Promise.resolve(42); p.then(x => console.log(x)); p.then(x => console.log(x + 1)); 两次都立即输出,不等待也不重复执行
- 这种特性让 Promise 具备 memoization(记忆)能力,适合做一次性数据获取的封装
链式调用产生新 Promise,而非修改原对象
每个 then/catch 返回的是全新 Promise,其状态由对应回调的返回值或抛出错误决定:
- 回调返回普通值 → 新 Promise 状态为 Fulfilled,值为该返回值
- 回调返回另一个 Promise → 新 Promise 状态和值等同于那个 Promise
- 回调抛出异常 → 新 Promise 状态为 Rejected,理由为该错误










