This rule forbids usage of Promise-like values in statements without handling
their errors appropriately. Unhandled promises can cause several issues, such
as improperly sequenced operations, ignored Promise rejections and more. Valid
ways of handling a Promise-valued statement include await
ing, returning, and
either calling .then()
with two arguments or .catch()
with one argument.
Examples of incorrect code for this rule:
const promise = new Promise((resolve, reject) => resolve('value'));
promise;
async function returnsPromise() {
return 'value';
}
returnsPromise().then(() => {});
Promise.reject('value').catch();
Promise.reject('value').finally();
Examples of correct code for this rule:
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(() => {});
The rule accepts an options object with the following properties:
type Options = {
// if true, checking void expressions will be skipped
ignoreVoid?: boolean;
// if true, checking for async iife will be skipped
ignoreIIFE?: boolean;
};
const defaults = {
ignoreVoid: false,
};
This allows to easily suppress false-positives with void operator.
Examples of correct code for this rule with { ignoreVoid: true }
:
async function returnsPromise() {
return 'value';
}
void returnsPromise();
void Promise.reject('value');
This allows to skip checking of async iife
Examples of correct code for this rule with { ignoreIIFE: true }
:
(async function() {
await res(1);
})();
const foo = () =>
new Promise(res => {
(async function() {
await res(1);
})();
});
Examples of incorrect code for this rule with { ignoreIIFE: true }
:
(async function() {
Promise.resolve();
})();
If you do not use Promise-like values in your codebase or want to allow them to remain unhandled.
- TSLint: 'no-floating-promises'