return await
(no-return-await)Inside an async function
, return await
is seldom useful. Since the return value of an async function
is always wrapped in Promise.resolve
, return await
doesn’t actually do anything except add extra time before the overarching Promise resolves or rejects. The only valid exception is if return await
is used in a try/catch statement to catch errors from another Promise-based function.
This rule aims to prevent a likely common performance hazard due to a lack of understanding of the semantics of async function
.
Examples of incorrect code for this rule:
async function foo() {
return await bar();
}
Examples of correct code for this rule:
async function foo() {
return bar();
}
async function foo() {
await bar();
return;
}
async function foo() {
const x = await bar();
return x;
}
async function foo() {
try {
return await bar();
} catch (error) {}
}
In the last example the await
is necessary to be able to catch errors thrown from bar()
.
If you want to use await
to denote a value that is a thenable, even when it is not necessary; or if you do not want the performance benefit of avoiding return await
, you can turn off this rule.
This rule was introduced in ESLint 3.10.0.
© JS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/rules/no-return-await