# prefer-promise-reject-errors
要求使用 Error 对象作为 Promise 拒绝原因
对于 Promises 中的用户定义错误,仅将内置 Error
对象的实例传递给 reject()
函数被认为是一种很好的做法。Error
对象自动存储堆栈跟踪,可用于通过确定错误来自何处来调试错误。如果 Promise 以非 Error
值被拒绝,则可能很难确定拒绝发生的位置。
# 规则详情
该规则旨在确保 Promises 仅被 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
个对象的 Promises。虽然该规则将报告可以保证拒绝原因显然不是 Error
的情况,但不会报告给定原因是否为 Error
不确定的情况。有关此警告的更多信息,请参阅 no-throw-literal
规则中的 类似的限制
。
为了避免规则之间的冲突,此规则不会报告异步函数中 throw
语句中使用的非错误值,即使这些会导致 Promise 被拒绝。要针对这些情况进行检查,请使用 no-throw-literal
规则。
# 何时不使用
如果您使用自定义非错误值作为 Promise 拒绝原因,您可以关闭此规则。