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
.
The following patterns are considered warnings:
async function foo() { return await bar(); }
The following patterns are not warnings:
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