版本

prefer-promise-reject-errors

要求使用 Error 对象作为 Promise 拒绝的原因

对于 Promise 中用户定义的错误,最佳实践是仅将内置 Error 对象的实例传递给 reject() 函数。Error 对象会自动存储堆栈跟踪,这可用于通过确定错误的来源来调试错误。如果 Promise 使用非 Error 值被拒绝,则可能难以确定拒绝发生的位置。

规则详情

此规则旨在确保 Promise 仅使用 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 对象拒绝 Promise。虽然此规则将报告可以保证拒绝原因明显不是 Error 的情况,但它不会报告存在关于给定原因是否为 Error 的不确定性的情况。有关此警告的更多信息,请参阅no-throw-literal 规则中的类似限制

为了避免规则之间的冲突,即使这些会导致 Promise 拒绝,此规则也不会报告异步函数中 throw 语句中使用的非错误值。要检查这些情况,请使用no-throw-literal规则。

何时不使用它

如果您正在使用自定义非错误值作为 Promise 拒绝的原因,则可以关闭此规则。

版本

此规则在 ESLint v3.14.0 中引入。

进一步阅读

资源

更改语言