Promise.reject()

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

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。为了便于调试和有选择性地捕获错误,最好让 reasonError 的一个实例。

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

浏览器兼容性

另见