メインコンテンツへスキップ

promise-function-async

Promise を返す関数またはメソッドには async マークを付けることを要求します。

🔧

このルールで報告される一部の問題は、 --fix ESLint コマンドラインオプション.

で自動的に修正可能です。

💭 このルールを実行するには 型情報

各関数が次のいずれかのみを返すようにします。

  • リジェクトされた Promise、または
  • Error オブジェクトをスローする。

対照的に、async でない、Promise を返す関数は、技術的にはどちらも可能です。これらの関数の結果を処理するコードは、多くの場合、両方のケースを処理する必要があり、複雑になる可能性があります。このルールのプラクティスでは、両方のケースを処理するコードを作成する必要性を排除します。

関数が PromisePromise でない型の union を暗黙的に返す場合、通常は間違いです。このルールはそのようなケースをフラグします。意図的なものである場合は、ルールをパスさせるために明示的に返り値の型を宣言してください。

.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/promise-function-async": "error"
}
};

プレイグラウンドでこのルールを試す ↗

このルールのコード例

const arrowFunctionReturnsPromise = () => Promise.resolve('value');

function functionReturnsPromise() {
return Promise.resolve('value');
}

function functionReturnsUnionWithPromiseImplicitly(p: boolean) {
return p ? 'value' : Promise.resolve('value');
}
プレイグラウンドで開く

オプション

このルールは次のオプションを受け付けます

type Options = [
{
/** Whether to consider `any` and `unknown` to be Promises. */
allowAny?: boolean;
/** Any extra names of classes or interfaces to be considered Promises. */
allowedPromiseNames?: string[];
checkArrowFunctions?: boolean;
checkFunctionDeclarations?: boolean;
checkFunctionExpressions?: boolean;
checkMethodDeclarations?: boolean;
},
];

const defaultOptions: Options = [
{
allowAny: true,
allowedPromiseNames: [],
checkArrowFunctions: true,
checkFunctionDeclarations: true,
checkFunctionExpressions: true,
checkMethodDeclarations: true,
},
];

allowAny

anyunknown を返す関数を無視するかどうか。追加の安全性を求める場合は、このオプションをオフにすることを検討してください。これにより、ルールが不正な Promise の動作をキャッチする能力が低下します。

{ "allowAny": false } を使用したコード例

const returnsAny = () => ({}) as any;
プレイグラウンドで開く

allowedPromiseNames

非同期コードにグローバルに組み込まれた Promise 以外の構造を使用するプロジェクト向け。このオプションを使用すると、関数がチェックされる原因となるクラスまたはインターフェースの文字列名を指定できます。

{ "allowedPromiseNames": ["Bluebird"] } を使用したコード例

class Bluebird {}

const returnsBluebird = () => new Bluebird(() => {});
プレイグラウンドで開く

checkArrowFunctions

アロー関数をチェックするかどうか。デフォルトは true ですが、false に設定すると無視できます。

checkFunctionDeclarations

スタンドアロンの関数宣言をチェックするかどうか。デフォルトは true ですが、false に設定すると無視できます。

checkFunctionExpressions

インラインの関数式をチェックするかどうか。デフォルトは true ですが、false に設定すると無視できます。

checkMethodDeclarations

クラスとオブジェクトリテラルのメソッドをチェックするかどうか。デフォルトは true ですが、false に設定すると無視できます。

使用しない場合

このルールは、常に関数を async にする必要がある API を使用するプロジェクトでは有効にするのが難しい場合があります。このルールを完全に無効にする代わりに、特定の状況下での依存関係に関する問題を提起するとともに、ESLint disable コメントの使用を検討することができます。


型チェックされたリンターのルールは、従来のリンターのルールよりも強力ですが、型チェックされたリンティングの設定も必要です。型チェックされたルールを有効にした後にパフォーマンスの低下が発生した場合は、パフォーマンスのトラブルシューティングを参照してください。

参考資料