版本

prefer-promise-reject-errors

要求使用 Error 物件作為 Promise 拒絕的原因

將內建的 Error 物件的實例傳遞給 reject() 函式,以表示 Promise 中使用者定義的錯誤,被認為是一種良好的實踐。Error 物件會自動儲存堆疊追蹤,可以用於偵錯錯誤,判斷錯誤的來源。如果 Promise 以非 Error 值拒絕,則可能難以判斷拒絕發生的位置。

規則詳情

此規則旨在確保 Promise 僅以 Error 物件拒絕。

選項

此規則採用一個可選的物件參數

  • allowEmptyReject: true(預設為 false)允許呼叫不帶任何參數的 Promise.reject()

此規則的錯誤程式碼範例

在遊樂場開啟
/*eslint prefer-promise-reject-errors: "error"*/

Promise.reject("something bad happened");

Promise.reject(5);

Promise.reject();

new Promise(function(resolve, reject) {
  reject("something bad happened");
});

new Promise(function(resolve, reject) {
  reject();
});

此規則的正確程式碼範例

在遊樂場開啟
/*eslint prefer-promise-reject-errors: "error"*/

Promise.reject(new Error("something bad happened"));

Promise.reject(new TypeError("something bad happened"));

new Promise(function(resolve, reject) {
  reject(new Error("something bad happened"));
});

var foo = getUnknownValue();
Promise.reject(foo);

使用 allowEmptyReject: true 選項時,此規則的正確程式碼範例

在遊樂場開啟
/*eslint prefer-promise-reject-errors: ["error", {"allowEmptyReject": true}]*/

Promise.reject();

new Promise(function(resolve, reject) {
  reject();
});

已知限制

由於靜態分析的限制,此規則無法保證您只會使用 Error 物件拒絕 Promise。雖然此規則會回報它可以保證拒絕原因明顯不是 Error 的情況,但對於給定的原因是否為 Error 存在不確定性的情況,它不會回報。有關此注意事項的更多資訊,請參閱 no-throw-literal 規則中類似的限制

為了避免規則之間的衝突,此規則不會回報在 async 函式的 throw 陳述式中使用的非錯誤值,即使這些值會導致 Promise 拒絕。若要檢查這些情況,請使用 no-throw-literal 規則。

何時不使用它

如果您使用自訂的非錯誤值作為 Promise 拒絕的原因,您可以關閉此規則。

版本

此規則是在 ESLint v3.14.0 中引入的。

延伸閱讀

資源

變更語言