Promise是JavaScript中处理异步操作的原生对象,代表必定有结果的异步任务;其状态仅限pending、fulfilled、rejected三种,且pending只能单向转为后两者之一,终态不可逆,保障结果确定性。

Promise 是 JavaScript 中处理异步操作的原生对象,它代表一个尚未完成但**必定会有结果**的异步任务——要么成功返回值,要么失败抛出错误。它的设计初衷是解决回调地狱,让异步逻辑更线性、可读、可组合。
Promise 的三种核心状态
每个 Promise 实例在任意时刻只处于以下一种状态,且该状态由内部机制严格管控:
-
Pending(等待中):初始状态。Promise 被创建后立即进入此态,此时异步操作尚未结束,
.then()和.catch()的回调均不执行。 -
Fulfilled(已兑现):表示异步操作成功完成。通常由执行器函数中调用
resolve(value)触发,之后所有注册的.then(onFulfilled)回调会被依次调用。 -
Rejected(已拒绝):表示异步操作失败。通常由执行器中调用
reject(reason)或抛出未捕获异常触发,之后所有注册的.catch(onRejected)(或.then(null, onRejected))会被调用。
状态转换的不可逆规则
Promise 的状态流转不是随意的,而是遵循一套确定、单向、不可撤销的机制:
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
- Pending 可以且只能转换为 Fulfilled 或 Rejected —— 二者互斥,不会同时发生;
- 一旦变为 Fulfilled 或 Rejected,状态永久锁定,后续任何
resolve或reject调用都会被忽略; - 不存在 Fulfilled ↔ Rejected 之间的相互转换,也不支持从任一终态退回 Pending;
- 这种不可逆性保障了 Promise 结果的确定性和可预测性,是链式调用与错误冒泡正确工作的基础。
常见误解澄清
有些行为看似“改变了状态”,实则无效:
立即学习“Java免费学习笔记(深入)”;
- 在已 resolve 的 Promise 内再调用
reject()—— 不会改变状态,也不会触发.catch(); - 在
.then()回调里抛错,不会让原 Promise 变为 rejected,而是让其返回的新 Promise 进入 rejected 状态; -
Promise.resolve()创建的是立即处于 fulfilled 状态的 Promise,Promise.reject()同理,它们跳过 pending 阶段。

















