# no-return-await
禁止不必要的 return await
在 async function
中使用 return await
将当前函数保留在调用堆栈中,直到正在等待的 Promise 已解决,代价是在解决外部 Promise 之前执行额外的微任务。return await
也可以用在 try/catch 语句中,以从另一个返回 Promise 的函数中捕获错误。
您可以通过不等待返回值来避免额外的微任务,如果与返回的 Promise 异步抛出错误,则函数的权衡不再是堆栈跟踪的一部分。这会使调试更加困难。
# 规则详情
此规则旨在防止由于对 async function
的语义缺乏理解而可能导致的常见性能危害。
此规则的错误代码示例:
/*eslint no-return-await: "error"*/
async function foo() {
return await bar();
}
此规则的正确代码示例:
/*eslint no-return-await: "error"*/
async function foo() {
return bar();
}
async function foo() {
await bar();
return;
}
// This is essentially the same as `return await bar();`, but the rule checks only `await` in `return` statements
async function foo() {
const x = await bar();
return x;
}
// In this example the `await` is necessary to be able to catch errors thrown from `bar()`
async function foo() {
try {
return await bar();
} catch (error) {}
}
# 何时不使用
您可能希望关闭此规则有几个原因:
- 如果你想使用
await
来表示一个值是 thenable - 如果您不希望避免
return await
的性能优势 - 如果您希望函数显示在堆栈跟踪中(用于调试目的)