promise有pending、fulfilled、rejected三种状态,且状态单向不可逆:pending为初始等待态,由resolve/reject触发转为fulfilled或rejected;fulfilled表示成功并传递值,rejected表示失败并携带reason。

Promise对象有三个状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。状态一旦改变,就不可逆——只能从 pending 转为 fulfilled 或 rejected,且后续不会再变。
pending:初始等待状态
创建 Promise 实例时,默认处于 pending 状态。此时异步操作尚未完成,既没成功也没失败。
常见情况包括:定时器未到、网络请求未返回、文件读取未结束等。
- 不能直接通过代码手动进入或退出 pending 状态
- 只有内部执行器(executor)中的 resolve() 或 reject() 调用才能触发状态变更
- 此时 .then() 和 .catch() 的回调都不会立即执行
fulfilled:操作成功完成
当 executor 中调用 resolve(value) 时,Promise 状态变为 fulfilled,并携带一个值(value)。
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
该值会作为第一个 .then() 回调函数的参数传入。
- resolve() 只接受一个参数,多传会被忽略
- 如果传入的是另一个 Promise,当前 Promise 会等待它完成,再继承其状态和结果
- 一旦变为 fulfilled,所有后续注册的 .then() 都会按顺序执行(微任务队列)
rejected:操作执行失败
当 executor 中调用 reject(reason) 或抛出未捕获异常时,Promise 状态变为 rejected,并携带一个拒绝原因(reason),通常是 Error 实例。
该原因会作为 .catch() 或 .then(null, onRejected) 的参数传入。
- reject() 同样只接收一个参数
- 未被 catch 捕获的 rejected Promise 会在控制台报错(Uncaught (in promise))
- 即使之后补上 .catch(),状态也不会从 rejected 变回 pending 或 fulfilled
状态转换是单向且不可撤销的,设计初衷就是表达“一次性异步结果”。理解这点,就能避免误以为可以重试或重置 Promise 状态。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










