【问题标题】:Lint warning for invoking an async function without `.then()` or `await` without TypeScript调用不带 `.then()` 或 `await` 且不带 TypeScript 的异步函数的 Lint 警告
【发布时间】:2018-10-07 10:03:12
【问题描述】:

在 TypeScript 中,可以检查并警告开发人员是否同步调用 async 函数。

对于那些希望减少开销并使用 node.js v9.0+ 的人,如果我们有类似的东西,是否可以让任何 linter 给我们一个警告?

async function foo() {
  return;
}

var result = foo(); // warning right here because there is no await

原因是,除非我们明确将其命名为fooAsync,查看实现,或者假设一切都是异步的,否则函数是否返回承诺/等待显然不是很明显。或者开发人员搞砸了,忘记写await

只想在开发时而不是运行时发出警告以捕获错误。

【问题讨论】:

  • 不知道为什么你会想要这个,当 Promise 有很多用例时......
  • 也许我的问题写得不正确。你是说不要使用 async/await 并使用 Promise 模式?
  • async/await 只是糖。 async 函数会自动返回 Promise,如果需要,可以在不使用 awaiting 的情况下使用它们。你为什么要限制你的灵活性?
  • @JaredSmith 我认为关键是tslint 可以在未正确处理承诺时发出警告,并且操作人员正在寻找可以在将 node.js 与 javascript 一起使用时发出警告的东西(而不是带有打字稿的node.js)。

标签: javascript node.js async-await eslint


【解决方案1】:

不,这是不可能的。正如你所说,它需要类型推断或至少注释来决定一个函数是否会返回一个承诺。这就是 TypeScript 编译器之类的类型检查器所做的,而不是 linter。

【讨论】:

  • 但是这对于 TypeScript 是否存在呢?如果是这样,在哪里(例如在 eslint 中)?
  • @slhck typescript-eslint 确实有 no-floating-promisesawait-thenable 规则
  • no-floating-promises 可以解决问题。你想用那个修改你的答案吗?
猜你喜欢
  • 2017-08-27
  • 2018-01-09
  • 2019-08-28
  • 2018-09-06
  • 2020-07-01
  • 2020-01-09
  • 2013-04-08
  • 2019-02-08
  • 2017-07-20
相关资源
最近更新 更多