Skip to content
← Back to rules

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

参照