Promise.reject()

基线 广泛可用

此功能已得到充分确立,并在许多设备和浏览器版本上都能正常工作。它已在浏览器中提供,自 2015年7月.

**Promise.reject()** 静态方法返回一个使用给定原因被拒绝的 Promise 对象。

试一试

语法

js
Promise.reject(reason)

参数

reason

Promise 被拒绝的原因。

返回值

一个使用给定原因被拒绝的 Promise

描述

静态 Promise.reject 函数返回一个被拒绝的 Promise。出于调试目的和选择性错误捕获,将 reason 设置为 instanceof Error 是很有用的。

Promise.reject() 是通用的,支持子类化,这意味着它可以在 Promise 的子类上调用,并且结果将是子类类型的 Promise。为此,子类的构造函数必须实现与 Promise() 构造函数相同的签名 - 接受一个单一的 executor 函数,该函数可以用 resolvereject 回调作为参数来调用。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 实例。它始终返回一个包装 reason 的新 Promise 实例。

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 语言规范
# sec-promise.reject

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅