版本

prefer-promise-reject-errors

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

一般認為,對於 Promise 中使用者定義的錯誤,只將內建 Error 物件的實例傳遞給 reject() 函數是一種良好實務。 Error 物件會自動儲存堆疊追蹤,可用於偵錯錯誤,以判斷錯誤的來源。如果 Promise 因非 Error 值而被拒絕,則可能難以判斷拒絕發生在哪裡。

規則詳細資訊

此規則旨在確保 Promise 僅因 Error 物件而被拒絕。

選項

此規則接受一個可選的物件參數

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

此規則的不正確程式碼範例

在 Playground 中開啟
/*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();
});

此規則的正確程式碼範例

在 Playground 中開啟
/*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"));
});

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

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

在 Playground 中開啟
/*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 中引入。

延伸閱讀

資源

變更語言