为什么 TypeScript 不强制执行 async/await 承诺?

Why doesn't TypeScript enforce async/await on promise?

我有以下代码。 performAsyncAction 执行异步操作,returns Promise<Response>。在 someFunction 中,我很惊讶 TypeScript 没有警告 not 在 returns 承诺的函数上使用 await。

function performAsyncAction() {
  return fetch('someservice');
}

function someFunction() {
    const result = performAsyncAction(); // Was expecting typescript to give error here
}

我找到了可能有帮助的相关 linting 规则 promise-function-async

这不是错误,这是预期的行为。

  1. Promise 早在 async/await 之前就存在了,您有多种方式来处理它们
  2. A​​waiting promise是函数的内部逻辑,不是需求
  3. Typescript 很清楚你有 Promise 而不是 Promise 中的值,所以如果你想以错误的方式使用它,它会警告你
  4. 您提供的功能不是async,所以根本无法等待
  5. await/async和Promise在Javascript中是一回事,你awaitPromise还是.thenPromise都没有关系,它只是语法糖(虽然有用)
  6. 很多情况下你不想等待新创建的Promise,即允许一次处理多个Promise,从而减少处理请求的时间

我完全同意你的看法。根据我的经验,忘记等待承诺是大多数问题的根源,尤其是处理错误时。

虽然 await/async 语法存在于纯 JS 中,但引入另一种语法糖将非常有意义,它会通知 TS 编译器您打算将承诺留给 运行 'in-the-background' .

与任何其他严格检查一样,这将是可选的。

例如

async function someFunction() {
   const result = performAsyncAction(); // Compilation error
}

async function someFunction() {
   const result = along performAsyncAction(); // Returns promise
}

async function someFunction() {
   const result = await performAsyncAction(); // Awaits the promise
}