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

瀏覽器相容性

另見