Detect missing await in JavaScript methods in VSCode(检测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:
这篇关于检测VSCode中的JavaScript方法中缺少的等待的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:检测VSCode中的JavaScript方法中缺少的等待
基础教程推荐
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 动态更新多个选择框 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01