no-return-await
禁止不必要的 return await
💡 有建議
此規則回報的一些問題可透過編輯器的建議 手動修正
此規則已在 ESLint v8.46.0 中棄用,沒有替代規則。此規則最初的意圖是阻止使用 return await
,以避免額外的微任務。然而,由於 JavaScript 現在以不同的方式處理原生 Promise
,因此不再存在額外的微任務。更多技術資訊可以在這篇 V8 部落格文章中找到。
在 async function
內部使用 return await
會使目前的函式保留在呼叫堆疊中,直到被等待的 Promise 完成解析,代價是在解析外部 Promise 之前增加一個額外的微任務。return await
也可以在 try/catch 語句中使用,以捕獲從另一個返回 Promise 的函式產生的錯誤。
您可以通過不等待返回值來避免額外的微任務,但如果從返回的 Promise 異步拋出錯誤,則該函式將不再是堆疊追蹤的一部分。這會使除錯更加困難。
規則詳情
此規則旨在防止由於不了解 async function
的語義而可能發生的常見效能風險。
此規則的錯誤程式碼範例
在遊樂場中開啟
/*eslint no-return-await: "error"*/
async function foo() {
return ;
}
此規則的正確程式碼範例
在遊樂場中開啟
/*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 中引入。
延伸閱讀

