Promise.resolve()和Promise.reject()是快速创建已决议或已拒绝Promise的静态方法:前者包装值为fulfilled态(支持Promise/thenable/普通值),后者直接返回rejected态(reason不处理);二者均产生微任务,回调在同步代码后执行。

Promise.resolve() 和 Promise.reject() 是 Promise 构造函数提供的两个静态方法,用于快速创建已决议(fulfilled)或已拒绝(rejected)的 Promise 实例,无需手动调用 new Promise()。
Promise.resolve():快速得到一个成功态的 Promise
它把传入的值“包装”成一个 Promise。如果参数本身是 Promise,就直接返回它;如果是 thenable(有 then 方法的对象),会尝试按 Promise A+ 规范执行其 then;其他值(如数字、字符串、对象)则变成 fulfilled 状态的 Promise。
-
Promise.resolve(42)→ 立即 resolve 的 Promise,后续.then(v => console.log(v))输出42 -
Promise.resolve(Promise.resolve('ok'))→ 返回原 Promise,不新建 -
Promise.resolve({ then: (resolve) => resolve('from thenable') })→ 按 thenable 处理,最终 resolve
Promise.reject():快速得到一个失败态的 Promise
它总是返回一个状态为 rejected 的 Promise,参数作为 rejection reason。注意:它不会检查参数是否为 Promise 或 thenable,直接原样作为 reason 抛出。
-
Promise.reject('error')→ 后续.catch(e => console.log(e))输出'error' -
Promise.reject(new Error('boom'))→ 推荐传 Error 实例,便于调试和堆栈追踪 -
Promise.reject(Promise.resolve('ignored'))→ reason 就是那个 Promise 对象,不是它的值
常见用途与注意事项
这两个方法常用于工具函数封装、统一返回 Promise 类型、或在条件分支中提前结束异步流程。
- 统一接口:函数无论同步还是异步,都返回 Promise,可用
return Promise.resolve(value)包装同步结果 - 短路逻辑:比如权限校验失败时,直接
return Promise.reject(new Error('no access')) - 避免多余 new Promise:不需要写
new Promise(resolve => resolve(val)),用Promise.resolve(val)更简洁安全 - 慎用 reject 原始值:尽量传 Error 实例,否则在未捕获时,控制台可能只显示
Uncaught (in promise) xxx,缺少堆栈信息
和 new Promise 的关键区别
Promise.resolve() 和 Promise.reject() 创建的 Promise 是**微任务队列中立即可调度的**,但执行时机仍遵循 Promise 微任务机制——它们不会同步触发 then 或 catch 回调,而是等当前同步代码执行完后,在下一个微任务中运行。
-
Promise.resolve().then(() => console.log('microtask'))一定在console.log('sync')之后输出 - 而
new Promise(resolve => { console.log('sync in ctor'); resolve(); }).then(...)中的同步日志会先执行
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











