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 then 和 catch 方法中检查的回调函数名称列表。
exceptions
type: string[]
默认值: []
允许出现在 Promise then 和 catch 方法中的回调函数名称列表。
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