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