【发布时间】:2018-03-29 15:06:53
【问题描述】:
我们在节点应用程序 b/c 中部署了错误,我们忘记在异步函数调用前加上“await”。
例子:
const getUsers = async () => db.query('SELECT * from Users');
const testMissingAwait = async () => {
const users = getUsers(); // <<< missing await
console.log(users.length);
};
testMissingAwait();
有没有一种简单的方法可以找到缺少 await 关键字的异步函数调用?
如果做不到这一点,编写一个自动标记这些的 Visual Studio Code 扩展需要付出多少努力? (如果有人能指出我正确的方向,我愿意解决)。
【问题讨论】:
-
该功能甚至需要异步吗?它有什么收获吗? (getUsers)
-
你在这个项目中使用打字稿吗?如果是这样,它应该在编译时捕获该错误,因为类型
Promise<xxx>没有属性“长度”。 -
@CRice 如果您执行“users.length”则有效,因为 Promise 没有属性“length”,但如果您忘记等待没有返回值的异步函数,那么 Typescript 将无济于事你用这个机制。有谁知道是否有一个 Typescript 设置(或其他 linter)可以检测到您没有等待的异步函数调用并将它们标记为可能的错误(您可以使用指令显式忽略仅当您想要启动异步工作时而不是等待它)?
-
实际上似乎有一个 tslint 规则来检测称为 no-floating-promises 的“浮动”承诺 - palantir.github.io/tslint/rules/no-floating-promises, github.com/palantir/tslint/pull/1632
-
ESLint 中也有这方面的东西吗?
require-await不是吗。
标签: node.js typescript async-await visual-studio-code vscode-extensions