Promise 的核心是单向不可逆状态机,仅含 pending、fulfilled、rejected 三种状态,pending 可转后两者但不可逆;状态变更通过 resolve/reject 触发,遵循“先判后改”原子逻辑;状态变更后以微任务执行对应回调队列。
Promise 的核心状态变化过程靠的是单向、不可逆的状态机,配合执行器(executor)中显式调用的 resolve 或 reject 函数来触发。
Promise 实例始终处于以下其一状态:
resolve(value) 触发,之后不能再变reject(reason) 触发,之后也不能再变状态转换路径唯一:pending → fulfilled 或 pending → rejected。一旦进入后两者,任何后续调用 resolve 或 reject 都会被忽略。
每次调用 resolve 或 reject 时,都会先检查当前状态是否仍是 pending:
pending,直接返回,不做任何操作pending,才更新 this.state,并保存 this.value 或 this.reason
这种“先判后改”的逻辑,保证了状态变更不会被重复或覆盖,也避免了竞态问题。
Promise 内部维护两个回调队列:onFulfilledCallbacks 和 onRejectedCallbacks。它们在 then 被调用时收集回调函数,并在状态真正改变后统一执行:
fulfilled → 遍历并执行所有成功回调,传入 this.value
rejected → 遍历并执行所有失败回调,传入 this.reason
注意:这些回调是通过 queueMicrotask(微任务)调度的,确保它们在当前同步代码结束后、下一个宏任务前执行,这是 Promise “异步但非延迟”的关键。
new Promise 时,传入的 executor 函数会同步立即执行,也就是说,resolve 或 reject 的调用时机完全由你控制:
这种设计让 Promise 的状态起点清晰、过程可预测,为链式调用和错误冒泡打下基础。
2026阿里开发者评选出的全国最佳教培机构小程序开发工具实测对比:附教培机构小程序制作教程
轻抖app如何实名认证 轻抖实名认证方法
2026全国3款AI/SAAS商城小程序开发工具推荐:附商城小程序开发教程
RFID硬件选型与实操:标签打印机和手持终端:这两个设备选错很麻烦
专访GEO落地工程师罗长才:当静止轨道已然成为技术融合的枢纽
2026年7月全国精选3款AI/SAAS实体店小程序制作工具推荐:附门店小程序制作教程