版本

no-return-await

禁止不必要的 return await

💡 hasSuggestions

此規則回報的一些問題可以透過編輯器建議手動修正

重要

此規則已在 ESLint v8.46.0 中棄用。沒有替代規則。

了解更多

此規則的最初目的是為了勸阻使用 return await,以避免額外的微任務。然而,由於 JavaScript 現在以不同的方式處理原生 Promise,因此不再有額外的微任務。更多技術資訊可以在這篇 V8 部落格文章中找到。

async function 內部使用 return await 會使目前的函式保留在呼叫堆疊中,直到正在等待的 Promise 解析完成,代價是在解析外部 Promise 之前產生額外的微任務。return await 也可以在 try/catch 語句中使用,以捕捉來自另一個回傳 Promise 的函式的錯誤。

您可以避免額外的微任務,方法是不等待回傳值,但代價是如果從回傳的 Promise 非同步拋出錯誤,則該函式將不再是堆疊追蹤的一部分。這可能會使偵錯更加困難。

規則詳情

此規則旨在預防由於對 async function 的語意理解不足而可能造成的常見效能危害。

此規則的錯誤程式碼範例

在 Playground 中開啟
/*eslint no-return-await: "error"*/

async function foo() {
    return await bar();
}

此規則的正確程式碼範例

在 Playground 中開啟
/*eslint no-return-await: "error"*/

async function foo1() {
    return bar();
}

async function foo2() {
    await bar();
    return;
}

// This is essentially the same as `return await bar();`, but the rule checks only `await` in `return` statements
async function foo3() {
    const x = await bar();
    return x;
}

// In this example the `await` is necessary to be able to catch errors thrown from `bar()`
async function foo4() {
    try {
        return await bar();
    } catch (error) {}
}

何時不該使用它

您可能想要關閉此規則的原因有幾個

  • 如果您想要使用 await 來表示一個 thenable 值
  • 如果您不想要避免 return await 的效能優勢
  • 如果您希望函式顯示在堆疊追蹤中(對於偵錯目的很有用)

版本

此規則在 ESLint v3.10.0 中引入。

延伸閱讀

資源

變更語言