Promise.reject() 是创建立即 rejected Promise 的最简洁方式,用于同步抛出错误、终止异步流程或模拟失败;支持任意值(推荐 Error 实例),可在 async 函数中 return 使用,也适用于 Promise 链条件拦截,但需注意与 throw 的语义及使用场景差异。

Promise.reject() 是创建一个立即进入 rejected 状态的 Promise 的最简洁方式,常用于同步抛出错误、提前终止异步流程或模拟失败场景。
基本用法:直接返回失败 Promise
传入任意值(通常是 Error 实例或错误信息),它会立刻返回一个 rejected Promise:
- Promise.reject(new Error('请求超时')) —— 推荐用 Error 实例,便于堆栈追踪
- Promise.reject('用户未登录') —— 字符串也可,但调试性较差
- Promise.reject(401) —— 数字、对象等任意类型都支持
在 async 函数中快速退出
async 函数里不能直接 return rejected Promise,但可以用 throw 或 return Promise.reject():
- 用 throw new Error('权限不足') 更自然,语义清晰
- 若需保持链式风格(比如统一返回 Promise),可写 return Promise.reject(new Error('参数无效'))
配合 Promise 链做条件拦截
在 .then() 中主动拒绝,跳过后续成功处理逻辑:
立即学习“Java免费学习笔记(深入)”;
- fetch('/api/data').then(res => { if (!res.ok) return Promise.reject(new Error(`HTTP ${res.status}`)); return res.json(); })
- 这样后续 .catch() 就能统一捕获网络错误和业务异常
注意点:别和 throw 混淆使用场景
两者效果相似,但行为略有不同:
- throw 在 async 函数或 Promise 构造器中会自动转为 rejected Promise
- Promise.reject() 是显式构造,适合需要“返回”而非“抛出”的上下文(如 map、filter 异步操作)
- 避免在 Promise 构造器中既 throw 又调用 reject(),会造成重复拒绝警告


















