检测VSCode中的JavaScript方法中缺少的等待
我正在寻找一些eslint选项,或者在调用类内的异步方法之前检测缺少‘await’关键字的其他方法。请考虑以下代码:
const externalService = require('./external.service');
class TestClass {
constructor() { }
async method1() {
if (!await externalService.someMethod()) {
await this.method2();
}
}
async method2() {
await externalService.someOtherMethod();
}
module.exports = TestClass;
如果我将方法1转换为:
,将不会出现警告async method1() {
if (!await externalService.someMethod()) {
this.method2();
}
}
我尝试对‘.eslintrc’文件执行以下操作:
"require-await": 1,
"no-return-await": 1,
但运气不佳。有人知道这是否可能吗? 非常感谢!
解决方案
typescript-eslint对此有一个规则:no-floating-promises
此规则禁止在未正确处理语句错误的情况下在语句中使用类似Promise的值...处理承诺值语句的有效方法包括使用await
调用、返回,以及使用两个参数调用.then()
或使用一个参数调用.catch()
。
正如您可能从名称中了解到的那样,tyescript-eslint旨在为eslint添加类型脚本支持,但您也可以将其与JavaScript一起使用。我想应该由你来决定这一条规则是否过头了,但以下是步骤:
生成
tsconfig.json
文件npx tsc --init
安装依赖项
npm install --save-dev eslint @typescript-eslint/eslint-plugin @typescript-eslint/parser
修改您的
.eslintrc
文件根据我的测试,您至少需要以下条目:
{ "parser": "@typescript-eslint/parser", "parserOptions": { "project": "./tsconfig.json" }, "plugins": ["@typescript-eslint"], "rules": { "@typescript-eslint/no-floating-promises": ["warn"] } }
(我将其设置为
warn
因为as Quentin mentioned,所以在不使用await
的情况下调用返回承诺的函数是有效的。但如果您愿意,可以将其设置为error
。)
有关更多信息,请参阅以下文档:https://typescript-eslint.io/docs/linting/linting
下次运行eslint时,您应该会看到规则已应用:
$ npm run lint
...
./services/jobService.js
11:5 warning Promises must be awaited, end with a call to .catch, end with a call to .then with a rejection handler or be explicitly marked as ignored with the `void` operator @typescript-eslint/no-floating-promises
由于您特别提到了VS代码,这也很好地集成了ESLint plugin:
相关文章