The resolve and reject function should not be called multiple times in a Promise executor
- MULTIPLE_RESOLVE_IN_PROMISE_EXECUTOR
- Error
- Medium
- es6
This rule applies when the resolve or reject function of a Promise executor is called multiple times.
Once the resolve or reject is called, the state of the Promise can no longer be changed. If it is called multiple times, the later ones will have no effect.
Even when no immediate problem occurs, it is recommended to check the code logic and remove unintended ones among the multiple calls.
Noncompliant Code Example
View with compliant examples side by side// Example 1
let promise1 = new Promise((resolve, reject) => {
  fs.readFile('foo', (err, data) => {
    resolve(data);
    if (err) {
      reject(err); // MULTIPLE_RESOLVE_IN_PROMISE_EXECUTOR alarm because 'resolve' has already been called.
    }
  });
});
// Example 2
let promise2 = new Promise((resolve, reject) => {
  fs.readFile('bar', (err, data) => {
    if (err) {
      console.log(err);
      resolve('');
      reject(err); // MULTIPLE_RESOLVE_IN_PROMISE_EXECUTOR alarm because 'resolve' has already been called.
    } else {
      resolve(data);
    }
  });
});Compliant Code Example
View with noncompliant examples side by side// Example 1
let promise1 = new Promise((resolve, reject) => {
  fs.readFile('foo', (err, data) => {
    if (err) {
      reject(err);
      return;
    }
    resolve(data);
  });
});
// Example 2
let promise2 = new Promise((resolve, reject) => {
  fs.readFile('bar', (err, data) => {
    if (err) {
      console.log(err);
      resolve('');
    } else {
      resolve(data);
    }
  });
});Version
This rule was introduced in DeepScan 1.46.0.