Skip to content
← Back to rules

eslint/require-await 厳密

⚠️🛠️ A dangerous auto-fix is available for this rule.

何をするか

await 式のない非同期関数を禁止します。

メモ

このルールは、型対応の typescript/require-await ルールよりも正確性が劣ります。型対応のルールを使用している場合、常にこちらのルールよりそちらのルールを優先してください。

なぜ悪いのか

JavaScript の非同期関数は、他の関数と比較して以下の2つの重要な点で異なります:

  1. 戻り値は常に Promise になります。
  2. 関数内では await 演算子を使用できます。

非同期関数を使用する主な目的は、通常 await 演算子を使うためです。たとえば以下のようなコードです:

js
async function fetchData(processDataItem) {
  const response = await fetch(DATA_URL);
  const data = await response.json();

  return data.map(processDataItem);
}

await を使わない非同期関数は、もともと非同期関数である必要がない可能性があり、リファクタリングの意図しない結果であるかもしれません。

注意:このルールは非同期ジェネレーター関数を無視します。これはジェネレーターが値を返すのではなく生成(yield)するためであり、非同期ジェネレーターは別の非同期ジェネレーターのすべての値を生成するだけで、実際に await を使う必要がない場合があるためです。

このルールに違反する誤ったコードの例:

js
async function foo() {
  doSomething();
}

このルールに準拠する正しいコードの例:

js
async function foo() {
  await doSomething();
}

使い方

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

json
{
  "rules": {
    "require-await": "error"
  }
}
bash
oxlint --deny require-await

参照