Skip to content
← Back to rules

promise/no-return-wrap スタイル

An auto-fix is available for this rule.

何をするか

Promise.resolve または Promise.reject で返り値を不要にプロミスでラップするのを防ぎます。

このルールは以下の立場を強制します:

  1. プロミスを解決する場合、Promise.resolve(value) を返す代わりに、単に return value とすることで生の値を返すほうが良いです。

  2. プロミスを拒否する場合、Promise.reject(error) を返す代わりに、throw error として生のエラー値を投げるべきです。

2 の強制を無効化するオプションがあります。詳しくは以下のオプションセクションをご覧ください。

なぜ問題なのか

thencatch キャブバックの戻り文で、生の値をプロミスに変換するために Promise.resolvePromise.reject を使う必要はありません。成功ケースでは単に生の値を返し、失敗ケースでは生のエラー値を投げることで、同じ効果が得られます。そのため、一部の人々は Promise.resolve(1)Promise.reject(err) のような値を返すことを構文的なノイズと考えるのです。

このルールに対して不適切なコードの例:

js
myPromise().then(() => Promise.resolve(4));
myPromise().then(function () {
  return Promise.resolve(4);
});

myPromise().then(() => Promise.reject("err"));
myPromise().then(function () {
  return Promise.reject("err");
});
js
myPromise().catch(function () {
  return Promise.reject("err");
});
js
myPromise().finally(function () {
  return Promise.reject("err");
});
js
myPromise().finally(() => Promise.resolve(4));

このルールに対して適切なコードの例:

js
myPromise().then(() => 4);
myPromise().then(function () {
  return 4;
});

myPromise().then(() => throw "err");
myPromise().then(function () {
  throw "err";
});
js
myPromise().catch(function () {
  throw "err";
});
js
myPromise().finally(() => 4);

設定

このルールは、以下のプロパティを持つ設定オブジェクトを受け入れます:

allowReject

型: boolean

デフォルト: false

allowReject は、プロミスハンドラ内で Promise.reject を返すことを許可します。

allowRejecttrue に設定されている場合、以下のコードは適切な例となります:

js
myPromise().then(function () {
  return Promise.reject(0);
});
js
myPromise()
  .then()
  .catch(() => Promise.reject("err"));

使用方法

設定ファイルまたは CLI でこのルールを有効化するには、次のようにします:

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

参照