reject是Promise构造函数executor的第二个参数,用于将pending状态变为rejected;它不是Promise实例方法,不能对已有实例调用,且调用后状态不可逆。

在 JavaScript 中,reject 方法本身不是 Promise 的实例方法,而是 Promise 构造函数执行器(executor)函数的第二个参数。它用于**主动将新创建的 Promise 状态从 pending 变为 rejected**。
reject 是 executor 函数的参数,不是 Promise 实例的方法
你不能对一个已存在的 Promise 实例调用 .reject()(这会报错)。reject 只在 new Promise(...) 时由 JS 引擎传入,并且仅在构造时使用:
- 它是一个函数,接收一个“拒绝原因”(通常是 Error 对象或字符串)
- 调用它,就立即触发 Promise 进入 rejected 状态
- 一旦状态变为 rejected,就不可再改变(Promise 状态不可逆)
基本用法示例
下面是最常见的写法:
const myPromise = new Promise((resolve, reject) => {
// 模拟异步操作失败
setTimeout(() => {
const success = false;
if (success) {
resolve('操作成功');
} else {
reject(new Error('网络请求失败')); // ? 这里调用 reject,状态变 rejected
}
}, 1000);
});
myPromise
.then(result => console.log(result))
.catch(err => console.error(err.message)); // 输出:网络请求失败
reject 的参数可以是任意值,但推荐传 Error 实例
虽然你可以传字符串、数字甚至 null 给 reject(),但最佳实践是传 Error 对象:
- 便于调试:Error 包含堆栈信息(
err.stack) - 符合约定:大多数库和
async/await都期望捕获 Error 类型 - 避免静默失败:字符串错误不易追踪来源
注意:reject 不会终止执行,后续代码仍会运行
调用 reject() 只是改变 Promise 状态,不会像 return 或 throw 那样中断当前函数执行:
new Promise((resolve, reject) => {
reject('出错了');
console.log('这行依然会执行'); // ✅ 会打印
// 如果想停止,需手动 return
});
如需提前退出,建议加 return reject(...) 或在 if-else 后明确控制流程。


















