promise.resolve和promise.reject是创建已决议promise的最简方式:前者立即成功并转换值/promise/thenable,后者立即失败且不展平参数,语义清晰、无需new promise。

Promise.resolve 和 Promise.reject 是创建“一步到位”的已决议 Promise 的最简方式:一个立刻成功,一个立刻失败,无需 new Promise 冗余包装。
Promise.resolve:快速得到一个成功的 Promise
它把任意值转为已 fulfilled 状态的 Promise。传入普通值(如字符串、数字、对象),返回的 Promise 会立即以该值为结果;传入另一个 Promise,则直接返回它(不新建);传入 thenable(有 then 方法的对象),会尝试“吸收”其行为。
- Promise.resolve(42) → 立即 resolve(42)
- Promise.resolve(Promise.resolve('ok')) → 就是那个 Promise,不嵌套
- Promise.resolve({ then(cb) { cb('from thenable') } }) → 触发 then 并 resolve 对应值
Promise.reject:快速得到一个失败的 Promise
它总是返回一个已 rejected 状态的 Promise,参数就是 rejection reason。注意:它不会像 resolve 那样“展平” Promise 或 thenable —— 传入什么,就以什么为 reason 拒绝。
- Promise.reject('error') → 立即 reject('error')
- Promise.reject(new Error('boom')) → reject 这个 Error 实例
- Promise.reject(Promise.resolve('oops')) → reject 的 reason 就是那个 Promise 对象本身(不是它的值)
常见用途场景
它们常用于统一异步流程入口、提前终止链式调用、或作为工具函数返回值。
- 缓存命中时:return Promise.resolve(cachedData)
- 权限校验失败:return Promise.reject(new Error('No access'))
- 在 async 函数中替代 return await Promise.resolve(x),直接 return x 即可;但显式用 resolve/reject 更清晰表达意图
和 new Promise(() => {}) 的关键区别
new Promise 总是异步执行 executor,即使里面同步 resolve/reject,回调也进微任务队列;而 Promise.resolve(value) 和 Promise.reject(reason) 在 value 不是 Promise/thenable 时,返回的 Promise 状态是“同步已定”,但 .then/.catch 注册的回调仍按 Promise 规范走微任务——这点行为一致。真正差异在于简洁性和语义明确性:你不需要写 executor,也不用担心忘记 resolve/reject。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











