
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 中引入。
延伸阅读
