promise/no-callback-in-promise 正しさ
何をするか
Promise.prototype.then() または Promise.prototype.catch() 内部でコールバック関数 (cb()) を呼び出すことを禁止します。
なぜ問題か
then() や catch() メソッド内に直接コールバックを呼び出すと、予期しない振る舞いが生じる可能性があります。たとえば、コールバックが複数回実行されるといったケースです。また、このようにコールバックとプロミスのパラダイムを混在させると、コードがわかりにくくなり、保守性も低下します。
例
このルールに違反する誤ったコードの例:
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[]
default: ["callback", "cb", "done", "next"]
Promise の then および catch メソッド内でチェック対象とするコールバック関数名のリスト。
exceptions
type: string[]
default: []
Promise の then および catch メソッド内で許可するコールバック関数名のリスト。
timeoutsErr
type: boolean
default: false
setTimeout のようなタイマ関数内のコールバックについて、エラーとするかどうかを示す真偽値。
使用方法
設定ファイルまたは CLI 経由でこのルールを有効化するには、次のようにします:
json
{
"plugins": ["promise"],
"rules": {
"promise/no-callback-in-promise": "error"
}
}bash
oxlint --deny promise/no-callback-in-promise --promise-plugin