Skip to content

limitAsync

非同期関数の最大並行実行数を制限する新しい関数を作成します。

typescript
const limitedFunc = limitAsync(asyncFunc, concurrency);

参照

limitAsync(callback, concurrency)

複数回呼び出される非同期関数の並行実行数を制限したい場合は、limitAsyncを使用してください。指定された数だけ同時に実行され、追加の呼び出しは実行中の操作が完了するまで待機します。

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

// 最大3つのリクエストのみを同時に実行するように制限します。
const limitedFetch = limitAsync(async url => {
  return await fetch(url);
}, 3);

const urls = ['url1', 'url2', 'url3', 'url4', 'url5'];
await Promise.all(urls.map(url => limitedFetch(url)));
// 最初の3つが先に実行され、完了すると残りが実行されます。

外部API呼び出しやデータベースクエリなど、リソースを大量に使用する操作の負荷を制御するのに便利です。レート制限のあるAPIを使用する場合やサーバー負荷を管理する必要がある場合に特に効果的です。

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

// 重い計算を最大2つずつ処理します。
const processItem = async item => {
  return await heavyComputation(item);
};

const limitedProcess = limitAsync(processItem, 2);
const items = [1, 2, 3, 4, 5];
await Promise.all(items.map(item => limitedProcess(item)));
// 最大2つの項目のみが同時に処理されます。

パラメータ

  • callback (F extends (...args: any[]) => Promise<any>):並行実行数を制限する非同期関数です。
  • concurrency (number):同時に実行できる最大操作数です。

戻り値

(F):並行実行制限が適用された新しい関数を返します。元の関数と同じインターフェースを持ちます。

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