Skip to content

promise/no-callback-in-promise Correctness

This rule is turned on by default.

What it does

Disallows calling a callback function (cb()) inside a Promise.prototype.then() or Promise.prototype.catch().

Why is this bad?

Directly invoking a callback inside a then() or catch() method can lead to unexpected behavior, such as the callback being called multiple times. Additionally, mixing the callback and promise paradigms in this way can make the code confusing and harder to maintain.

Examples

Examples of incorrect code for this rule:

js
function callback(err, data) {
  console.log("Callback got called with:", err, data);
  throw new Error("My error");
}

Promise.resolve()
  .then(() => callback(null, "data"))
  .catch((err) => callback(err.message, null));

Examples of correct code for this rule:

js
Promise.resolve()
  .then((data) => {
    console.log(data);
  })
  .catch((err) => {
    console.error(err);
  });

How to use

To enable this rule in the CLI or using the config file, you can use:

bash
oxlint --deny promise/no-callback-in-promise --promise-plugin
json
{
  "plugins": ["promise"],
  "rules": {
    "promise/no-callback-in-promise": "error"
  }
}

References

Released under the MIT License.