promise/no-multiple-resolved
Disallow paths that call resolve or reject more than once in a new Promise() executor
A promise settles once. Every later call to resolve or reject is ignored without an error, and the code around it still runs. A second call on the same path usually means a missing return or else.
The rule checks the function passed to new Promise() and each function inside it, one function at a time.
Configure#
Off by default. To turn it on:
bunfig.toml
[lint.rules]
"promise/no-multiple-resolved" = "error" # or "warn"Examples#
example.js1 problem
function readConfig(path) {
return new Promise((resolve, reject) => {
fs.readFile(path, "utf8", (err, text) => {
if (err) {
reject(err);
}
resolve(text)Promise should not be resolved multiple times. Promise is potentially resolved on line 5.; // also runs after reject(err)
});
});
}example.jsNo problems
function readConfig(path) {
return new Promise((resolve, reject) => {
fs.readFile(path, "utf8", (err, text) => {
if (err) {
reject(err);
return;
}
resolve(text);
});
});
}A reject in a catch block is fine if nothing after resolve in the try can throw:
example.jsNo problems
new Promise((resolve, reject) => {
try {
resolve(JSON.parse(text));
} catch (err) {
reject(err);
}
});example.js1 problem
new Promise((resolve, reject) => {
try {
resolve(JSON.parse(text));
log("parsed"); // if this throws, reject runs after resolve
} catch (err) {
reject(err)Promise should not be resolved multiple times. Promise is already resolved on line 3.;
}
});