Linter · Rules
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
Reported:
function readConfig(path) {
return new Promise((resolve, reject) => {
fs.readFile(path, "utf8", (err, text) => {
if (err) {
reject(err);
}
resolve(text); // also runs after reject(err)
});
});
}
Not reported:
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:
new Promise((resolve, reject) => {
try {
resolve(JSON.parse(text));
} catch (err) {
reject(err);
}
});
new Promise((resolve, reject) => {
try {
resolve(JSON.parse(text));
log("parsed"); // if this throws, reject runs after resolve
} catch (err) {
reject(err);
}
});