
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"*/
;
;
;
new Promise(function(resolve, reject) {
;
});
new Promise(function(resolve, 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 中引入。
延伸閱讀
