promise.reject() 是创建立即失败 promise 的最简方式,推荐传入 error 实例以支持堆栈追踪、兼容主流库并便于类型判断,避免使用字符串或数字等非 error 类型作为 reason。

Promise.reject() 是创建一个立即失败的 Promise 的最简方式,传入任意值(错误对象、字符串、数字等)即可快速返回 rejected 状态。
基本用法:一行搞定失败态
直接调用 Promise.reject(reason),无需 new Promise 或 throw:
- Promise.reject(new Error('网络请求失败')) —— 推荐,传 Error 实例便于调试和捕获
- Promise.reject('用户未登录') —— 简单场景可用,但不如 Error 语义清晰
- Promise.reject(401) —— 极少数需透传状态码时可用,但不建议作为主要错误载体
常用于提前终止异步流程
在 async 函数或 Promise 链中,代替 throw 或手动 reject:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 参数校验失败时:if (!id) return Promise.reject(new Error('ID 不能为空'))
- 权限检查不通过:if (!user.isAdmin) return Promise.reject(new Error('权限不足'))
- 避免嵌套
new Promise((_, reject) => reject(...)),更简洁安全
注意与 throw 的区别
在 async 函数中,throw 和 Promise.reject() 效果相同(都让函数返回 rejected Promise),但语义不同:
- throw new Error(...) 表示“同步抛出异常”,更符合直觉
- Promise.reject(...) 明确表达“返回一个已拒绝的 Promise”,适合函数式链式调用场景(如 map、filter 后接 Promise)
- 两者都能被
.catch()或try/catch捕获,选哪个取决于可读性和上下文
慎用非 Error 类型的 reason
虽然 Promise 规范允许任何值作为 rejection 原因,但实际开发中建议统一用 Error 实例:
- 浏览器和 Node.js 的开发者工具对 Error 对象有堆栈追踪支持
- 第三方库(如 Axios、Redux Toolkit Query)默认期望 Error 类型,否则可能丢失上下文
- 团队协作时,
instanceof Error更易做类型判断和统一错误处理
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










