リトライ・タイムアウト・エラー
const results = await batchProcess( unreliableOperations, async (operation) => await performOperation(operation), { retry: { maxAttempts: 3, backoff: 'exponential', // または 'linear'(既定) initialDelay: 100, // 既定: 100ms maxDelay: 30000 // 既定: 30000ms } })maxAttemptsは最初の 1 回を含む総試行回数です。1 未満の値は 1 として扱い、整数でない値は切り捨てます。linearは、リトライのたびにinitialDelayだけ待機します。exponentialはinitialDelay * 2^(attempt - 1)だけ待機し、maxDelayで頭打ちになります。
タイムアウト
Section titled “タイムアウト”timeout は、各タスクの試行ごとに適用されます。超過したタスクは Error('Task timed out after <timeout>ms') で reject され、他のエラーと同様にリトライ処理へ渡ります。
try { await batchProcess(tasks, async (task) => await performTask(task), { timeout: 5000 })} catch (error) { console.error('Task timed out:', error.message)}エラーが出ても続ける
Section titled “エラーが出ても続ける”既定では、リトライを使い切った最初のエラーが batchProcess 呼び出し全体を reject します。continueOnError: true を指定すると、そのエラーは該当要素の位置で結果に格納されます。
const results = await batchProcess<Item, Result | Error>( items, async (item) => await processItem(item), { continueOnError: true })
results.flat().forEach((result, index) => { if (result instanceof Error) { console.error(`Item ${index} failed:`, result.message) }})結果の型を Result | Error と宣言しておくと、TypeScript がエラーの扱いを忘れないよう教えてくれます。