当 Promise 返回类型未等待时在 VS Code 中发出警告?

755*_*755 6 typescript visual-studio-code

我正在使用 Visual Studio Code 打字稿,并且想知道是否有一种方法可以让编辑器在出现异步函数调用(函数返回 a Promise)但调用者不等待它时显示某种警告(这样程序员就可以不要意外地假设一个函数是同步的并这样使用它)。

Ale*_*yne 0

只要您使用打字稿,类型系统就应该提醒您,无论您在何处使用该承诺的解析值,都不能使用该承诺:

function foo(): Promise<number> {
    return new Promise(resolve => resolve(123))
}

const myNumber: number = foo() // forgot await
// ^ Type 'Promise<number>' is not assignable to type 'number'.
Run Code Online (Sandbox Code Playgroud)

操场

所以,实际上,typescript 已经做了你想要的事情,只是不是按照你想的方式。


此外,也有充分的理由表明可能不会等待承诺。一个可能是你想要一堆并行的异步操作,所以你收集承诺并传递它们Promise.all。或者也许您处于不允许的最高级别await,并且使用它then更简单。

因此,只需让类型系统按预期工作即可,不用担心。当您开始实际使用等待的值时,如果做错了,就会给您带来类似于上面的类型错误。

  • 你的回答是不必要的轻蔑。类型系统会捕获这个特定的错误,但是一个更隐蔽的错误是当您不特别关心返回值时(例如:`await writeToDB(data)`),忘记了await会被默默地忽略,但很可能导致竞争条件和微妙的错误。针对该遗漏的编译器警告是有意义的。(我还会赞同余震建议查看 Rust,它可以很好地处理这个问题。忘记等待是一个错误,但如果您愿意/需要,您可以明确放弃。) (3认同)