Promise 状态只能通过执行器函数中的 resolve() 或 reject() 从 pending 变为 fulfilled 或 rejected,且不可逆、不可重置;外部无法直接修改状态,仅异步操作完成时触发。

Promise 的状态从 pending 改变为 fulfilled 或 rejected,只有一种方式:在执行器(executor)函数中调用 resolve() 或 reject() 函数。
执行器函数决定初始状态变化
Promise 构造函数接收一个执行器函数,该函数立即同步执行,并接收两个参数:resolve 和 reject。这两个是内置的回调函数,由 JavaScript 引擎提供:
- 调用
resolve(value)→ 状态变为 fulfilled,值为value - 调用
reject(reason)→ 状态变为 rejected,理由为reason - 若执行器中抛出未捕获异常(如
throw new Error(...)),等价于自动调用reject()
状态不可逆、不可重置
Promise 状态一旦改变,就无法再次修改:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 从
pending→fulfilled后,再调用resolve或reject无效 - 从
pending→rejected后,后续任何调用都不起作用 - Promise 没有提供任何 API(包括内部方法)让你手动切换状态
异步操作中常见触发时机
实际开发中,resolve / reject 通常在异步任务完成时被调用:
立即学习“Java免费学习笔记(深入)”;
-
setTimeout定时结束时 - AJAX 请求返回成功/失败响应后(如
fetch().then().catch()封装) - 文件读取、数据库查询等 I/O 操作完成时
- 事件监听器中(如图片加载成功
img.onload触发resolve)
注意:仅 executor 内部可触发状态变更
外部代码无法直接修改 Promise 状态:
- 没有
promise.setState('fulfilled')这样的方法 -
then()、catch()、finally()只能注册回调,不能改变状态 - 链式返回的新 Promise 是独立实例,原 Promise 状态不受影响

















