簡體   English   中英

為什么 TypeScript 不強制執行 async/await 承諾?

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

我有以下代碼。 performAsyncAction執行異步操作並返回Promise<Response> someFunction ,我很驚訝 TypeScript 沒有警告不要在返回承諾的函數上使用 await。

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

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

我發現了一個相關的 linting 規則可能有助於promise-function-async

這不是錯誤,而是預期的行為。

  1. Promises 早在 async/await 之前就存在了,你有幾種方法來處理它們
  2. 等待承諾是功能的內在邏輯,而不是要求
  3. Typescript 很清楚你有 Promise 而不是 Promise 里面的值,所以如果你想以錯誤的方式使用它,它會警告你
  4. 您提供的功能不是async ,因此甚至不可能在那里等待
  5. await/async 和 Promises 在 Javascript 中是一回事,無論你是await Promise 還是.then Promise,它唯一的語法糖(雖然有用)
  6. 很多情況下你不想等待新創建的Promise,即允許一次處理多個Promise,從而減少處理請求的時間

我絕對同意你的看法。 根據我的經驗,忘記等待承諾是大多數問題的根源,尤其是處理錯誤時。

盡管await/async語法存在於純 JS 中,但引入另一種語法糖來通知 TS 編譯器您打算放棄在“后台”運行的承諾,這將是非常有意義的。

與任何其他嚴格檢查一樣,這將是可選的。

經驗。

 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 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM