如何find在Node + Typescript + VSCodeasynchronous函数调用缺less的等待?
我们在节点应用程序b / c中部署了错误,我们忘记用“await”作为前缀asynchronous函数调用。
例:
const getUsers = async () => db.query('SELECT * from Users'); const testMissingAwait = async () => { const users = getUsers(); // <<< missing await console.log(users.length); }; testMissingAwait();
有没有一种简单的方法来find缺lessawait关键字的asynchronous函数调用?
否则,编写一个Visual Studio代码扩展会自动标记这些扩展会花多less功夫? (如果有人能指出我的方向,我可以解决问题)。
TypeScript已经这样做了
// users is a Promise<T> const users = getUsers(); // <<< missing await // users.length is not a property of users... then and catch are console.log(users.length);
你可以find你不会被告知你的错误的地方 – 这些types是兼容的,例如我在这里错过了一个等待:
function delay(ms: number) { return new Promise<number>(function(resolve) { setTimeout(() => { resolve(5); }, ms); }); } async function asyncAwait() { let x = await delay(1000); console.log(x); let y = delay(1000); console.log(y); return 'Done'; } asyncAwait().then((result) => console.log(result));
因为console.log
不会导致我的号码和我的承诺之间的任何types不兼容,编译器不能告诉我犯了一个错误。
这里唯一的解决scheme是一个types注释…但是如果你会忘记等待,你可能会忘记一个types注释。
let y: number = delay(1000);
TypeScript编译器不提供编译器选项。 但是,TSLint 4.4提供了检测浮动许诺的选项。 你可以阅读这个博客文章的更详细的答案: 检测打字稿中缺less的等待
下载TSLint:
npm install -g tslint typescript
configurationTSLint:
{ "extends": "tslint:recommended", "rules": { "no-floating-promises": true } }
运行TSLint:
tslint --project tsconfig.json
如果代码中存在浮动承诺,则应该看到以下错误:
错误:F:/Samples/index.ts [12,5]:承诺必须妥善处理