no-floating-promises
Require Promise-like statements to be handled appropriately.
Extending "plugin:@typescript-eslint/recommended-requiring-type-checking"
in an ESLint configuration enables this rule.
Some problems reported by this rule are manually fixable by editor suggestions.
This rule requires type information to run.
A "floating" Promise is one that is created without any code set up to handle any errors it might throw. Floating Promises can cause several issues, such as improperly sequenced operations, ignored Promise rejections, and more.
This rule reports when a Promise is created and not properly handled. Valid ways of handling a Promise-valued statement include:
await
ing itreturn
ing it- Calling its
.then()
with two arguments - Calling its
.catch()
with one argument
no-floating-promises
only detects unhandled Promise statements.
See no-misused-promises
for detecting code that provides Promises to logical locations such as if statements.
module.exports = {
"rules": {
"@typescript-eslint/no-floating-promises": "error"
}
};
Examples
- ❌ Incorrect
- ✅ Correct
const promise = new Promise((resolve, reject) => resolve('value'));
promise;
async function returnsPromise() {
return 'value';
}
returnsPromise().then(() => {});
Promise.reject('value').catch();
Promise.reject('value').finally();
const promise = new Promise((resolve, reject) => resolve('value'));
await promise;
async function returnsPromise() {
return 'value';
}
returnsPromise().then(
() => {},
() => {},
);
Promise.reject('value').catch(() => {});
Promise.reject('value').finally(() => {});
This rule accepts an options object with the following properties:
interface Options {
/**
* Whether to ignore `void` expressions.
*/
ignoreVoid?: boolean;
/**
* Whether to ignore async IIFEs (Immediately Invocated Function Expressions).
*/
ignoreIIFE?: boolean;
}
const defaultOptions: Options = [{ ignoreVoid: true, ignoreIIFE: false }];
Options
ignoreVoid
This allows you to stop the rule reporting promises consumed with void operator. This can be a good way to explicitly mark a promise as intentionally not awaited.
Examples of correct code for this rule with { ignoreVoid: true }
:
async function returnsPromise() {
return 'value';
}
void returnsPromise();
void Promise.reject('value');
With this option set to true
, and if you are using no-void
, you should turn on the allowAsStatement
option.
ignoreIIFE
This allows you to skip checking of async IIFEs (Immediately Invocated function Expressions).
Examples of correct code for this rule with { ignoreIIFE: true }
:
await(async function () {
await res(1);
})();
(async function () {
await res(1);
})();
When Not To Use It
If you do not use Promise-like values in your codebase, or want to allow them to remain unhandled.