Promise.reject()是创建立即失败Promise的最简洁方式,等价于new Promise((_, reject) => reject(reason)),用于提前终止、模拟失败或链式中断,但不触发同步try/catch。

Promise.reject() 是创建一个立即失败(rejected)的 Promise 的最简洁方式,它等价于手动调用 new Promise((_, reject) => reject(reason)),但更直观、更少出错。
基本用法:传入任意拒绝原因
你可以传入任何值作为 rejection reason —— 字符串、错误对象、数字、甚至 undefined:
Promise.reject("网络请求失败")Promise.reject(new Error("超时"))Promise.reject({ code: 500, message: "服务器内部错误" })
常用于错误提前终止或模拟失败场景
比如在函数开头做参数校验,不满足条件就直接返回失败 Promise,避免后续执行:
function fetchUser(id) {
if (!id) {
return Promise.reject(new Error("ID 不能为空"));
}
return fetch(`/api/users/${id}`)
.then(res => res.json());
}
这样调用方统一用 .catch() 或 await ... catch 处理,逻辑更一致。
注意:和 throw 的行为差异
在 async 函数中,throw 和 Promise.reject() 效果相同(都让 Promise 变为 rejected),但语义不同:
-
throw new Error(...)是同步抛错,进入 Promise rejection 流程; -
return Promise.reject(...)是显式返回一个已拒绝的 Promise,更明确、更适合链式调用中的“注入失败”。
例如:Promise.resolve(42).then(() => Promise.reject("强行中断")) 可以干净地中止后续 .then。
别误用:不是用来替代 try/catch 的工具
Promise.reject() 不会触发同步的 try/catch,它只影响 Promise 链。如果你在普通同步代码里写:
try {
Promise.reject("错了");
} catch (e) {
console.log("不会进这里");
}
这个 catch 捕获不到 —— 因为 Promise.reject() 创建的是异步拒绝,必须用 .catch() 或 await ... catch 来处理。


















