Promise.reject()
Promise.reject() 静态方法返回一个带有给定拒绝原因的 Promise 对象。
试一试
function resolved(result) {
console.log("Resolved");
}
function rejected(result) {
console.error(result);
}
Promise.reject(new Error("fail")).then(resolved, rejected);
// Expected output: Error: fail
语法
js
Promise.reject(reason)
参数
reason-
此
Promise拒绝的原因。
返回值
一个因给定原因而拒绝的 Promise。
描述
静态 Promise.reject 函数返回一个被拒绝的 Promise。为了便于调试和有选择性地捕获错误,最好让 reason 是 Error 的一个实例。
Promise.reject() 是通用的并支持子类化,这意味着它可以在 Promise 的子类上调用,结果将是子类类型的 promise。为此,子类的构造函数必须实现与 Promise() 构造函数相同的签名——接受一个可使用 resolve 和 reject 回调函数作为参数调用的单个 executor 函数。Promise.reject() 本质上是 new Promise((resolve, reject) => reject(reason)) 的简写。
与 Promise.resolve() 不同,Promise.reject() 总是将 reason 包装在一个新的 Promise 对象中,即使 reason 已经是 Promise 也是如此。
示例
使用静态 Promise.reject() 方法
js
Promise.reject(new Error("fail")).then(
() => {
// not called
},
(error) => {
console.error(error); // Stacktrace
},
);
以 promise 拒绝
与 Promise.resolve 不同,Promise.reject 方法不会复用现有的 Promise 实例。它总是返回一个新的 Promise 实例,该实例包装了 reason。
js
const p = Promise.resolve(1);
const rejected = Promise.reject(p);
console.log(rejected === p); // false
rejected.catch((v) => {
console.log(v === p); // true
});
在非 Promise 构造函数上调用 reject()
Promise.reject() 是一个通用方法。它可以在任何实现与 Promise() 构造函数相同签名的构造函数上调用。例如,我们可以在一个将 console.log 作为 reject 传递的构造函数上调用它
js
class NotPromise {
constructor(executor) {
// The "resolve" and "reject" functions behave nothing like the
// native promise's, but Promise.reject() calls them in the same way.
executor(
(value) => console.log("Resolved", value),
(reason) => console.log("Rejected", reason),
);
}
}
Promise.reject.call(NotPromise, "foo"); // Logs "Rejected foo"
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-promise.reject |
浏览器兼容性
加载中…