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 |
瀏覽器相容性
載入中…