Skip to content
← Back to rules

promise/no-callback-in-promise 正确性

它的作用

禁止在 Promise.prototype.then()Promise.prototype.catch() 内部调用回调函数(cb())。

为什么这是错误的?

then()catch() 方法内部直接调用回调函数可能导致意外行为,例如回调被多次调用。此外,以这种方式混合使用回调和 Promise 模式会使代码变得难以理解,更难维护。

示例

此规则的错误代码示例:

js
function callback(err, data) {
  console.log("回调已调用,参数为:", err, data);
  throw new Error("我的错误");
}

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

此规则的正确代码示例:

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

配置

此规则接受一个配置对象,包含以下属性:

callbacks

type: string[]

默认值: ["callback", "cb", "done", "next"]

需要在 Promise thencatch 方法中检查的回调函数名称列表。

exceptions

type: string[]

默认值: []

允许出现在 Promise thencatch 方法中的回调函数名称列表。

timeoutsErr

type: boolean

默认值: false

布尔值,表示在类似 setTimeout 这样的定时器函数中的回调是否应触发错误。

如何使用

要通过配置文件或 CLI 启用此规则,可以使用:

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

参考资料