Returning an awaited promise can make sense for better stack trace information as well as for consistent error handling (returned promises will not be caught in an async function try/catch).
This rule builds on top of the eslint/no-return-await
rule.
It expands upon the base rule to add support for optionally requiring return await
in certain cases.
{
// note you must disable the base rule as it can report incorrect errors
"no-return-await": "off",
"@typescript-eslint/return-await": "error"
}
type Options = 'in-try-catch' | 'always' | 'never';
const defaultOptions: Options = 'in-try-catch';
Requires that a returned promise must be await
ed in try-catch-finally
blocks, and disallows it elsewhere.
Examples of incorrect code with in-try-catch
:
async function invalidInTryCatch1() {
try {
return Promise.resolve('try');
} catch (e) {}
}
async function invalidInTryCatch2() {
return await Promise.resolve('try');
}
async function invalidInTryCatch3() {
return await 'value';
}
Examples of correct code with in-try-catch
:
async function validInTryCatch1() {
try {
return await Promise.resolve('try');
} catch (e) {}
}
async function validInTryCatch2() {
return Promise.resolve('try');
}
async function validInTryCatch3() {
return 'value';
}
Requires that all returned promises are await
ed.
Examples of incorrect code with always
:
async function invalidAlways1() {
try {
return Promise.resolve('try');
} catch (e) {}
}
async function invalidAlways2() {
return Promise.resolve('try');
}
async function invalidAlways3() {
return await 'value';
}
Examples of correct code with always
:
async function validAlways1() {
try {
return await Promise.resolve('try');
} catch (e) {}
}
async function validAlways2() {
return await Promise.resolve('try');
}
async function validAlways3() {
return 'value';
}
Disallows all await
ing any returned promises.
Examples of incorrect code with never
:
async function invalidNever1() {
try {
return await Promise.resolve('try');
} catch (e) {}
}
async function invalidNever2() {
return await Promise.resolve('try');
}
async function invalidNever3() {
return await 'value';
}
Examples of correct code with never
:
async function validNever1() {
try {
return Promise.resolve('try');
} catch (e) {}
}
async function validNever2() {
return Promise.resolve('try');
}
async function validNever3() {
return 'value';
}