Promise状态一旦变为fulfilled就不可逆,后续resolve调用被忽略;同理,rejected状态也无法被改变;这符合Promises/A+规范中状态只能从pending单向转换且终态不可变的核心规则。

不会有任何效果,Promise状态保持 fulfilled 不变,后续的 resolve 调用被完全忽略。
状态不可逆是核心规则
Promise 的设计规范(Promises/A+)明确规定:状态只能从 pending → fulfilled 或 pending → rejected,且一旦变更就永久锁定。fulfilled 状态无法再被任何操作更改,包括再次调用 resolve。
resolve 只在 pending 时生效
resolve 函数本质上是一个“状态触发器”,它只在 Promise 处于 pending 状态时才执行状态切换。一旦状态已为 fulfilled:
- 再次调用 resolve(value) 不会修改状态,也不会覆盖之前 resolve 的值
- 传入的新 value 被丢弃,不参与任何后续链式处理
- 已注册的 then 回调早已排队进入微任务队列,不受后续 resolve 影响
实际代码中的表现
例如:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
new Promise((resolve, reject) => {resolve('first');
resolve('second'); // 被忽略
}).then(console.log); // 输出 'first'
即使 resolve 被多次调用,只有第一次在 pending 时生效;其余调用静默失效,不报错也不改变行为。
与 reject 的行为一致
reject 同样遵循该规则:如果 Promise 已是 rejected,后续 reject 调用也被忽略。fulfilled 和 rejected 互不兼容,也无法相互转换 —— 它们都是终态。

















