Skip to content

forEachAsync

配列の各要素に対して非同期関数を実行します。

typescript
await forEachAsync(array, callback);

参照

forEachAsync(array, callback, options?)

配列の各要素に対して副作用を伴う非同期操作を実行する場合は、forEachAsyncを使用してください。通常のforEachとは異なり、すべての非同期操作が完了したときに解決されるPromiseを返します。

typescript
import { forEachAsync } from 'es-toolkit/array';

// すべてのユーザー情報を更新します。
const users = [{ id: 1 }, { id: 2 }, { id: 3 }];
await forEachAsync(users, async user => {
  await updateUser(user.id);
});
// すべてのユーザー更新が完了しました。

// 並行実行数を制限します。
const items = [1, 2, 3, 4, 5];
await forEachAsync(items, async item => await processItem(item), { concurrency: 2 });
// 最大2つの項目のみが同時に処理されます。

concurrencyオプションを使用すると、並行実行を制限してサーバーやデータベースへの負荷を制御できます。ログ記録、ファイルアップロード、データベース更新など、値を返さない操作に便利です。

typescript
import { forEachAsync } from 'es-toolkit/array';

// ファイルを順次アップロードします。
const files = ['file1.txt', 'file2.txt', 'file3.txt'];
await forEachAsync(files, async file => await uploadFile(file), { concurrency: 1 });
// 一度に1つずつアップロードされます。

パラメータ

  • array (readonly T[]):反復処理する配列です。
  • callback ((item: T, index: number, array: readonly T[]) => Promise<void>):各要素に対して実行する非同期関数です。
  • options (ForEachAsyncOptions, オプショナル):並行実行を制御するオプションです。
    • concurrency (number, オプショナル):同時に実行できる最大操作数です。指定しない場合、すべての操作が同時に実行されます。

戻り値

(Promise<void>):すべての操作が完了したときに解決されるPromiseを返します。

MIT ライセンスの下で配布されています。