async.ts view source
<T, R>(items: Iterable<T>, concurrency: number, fn: (item: T, index: number) => R | Promise<R>, signal?: AbortSignal | undefined): Promise<...> import {map_concurrent_settled} from '@fuzdev/fuz_util/async.js'; Like map_concurrent but collects all results/errors instead of failing fast.
Returns an array of settlement objects matching the Promise.allSettled pattern.
On abort, resolves with partial results: completed items keep their real settlements,
in-flight and un-started items are settled as rejected with the abort reason.
concurrency
maximum number of concurrent operations
type number
fn
type (item: T, index: number) => R | Promise<R>
signal?
optional AbortSignal to cancel processing
type AbortSignal | undefined
optional
returns
Promise<PromiseSettledResult<R>[]> array of PromiseSettledResult objects in input order
generics
map_concurrent_settled<T, R> throws
Error - if `concurrency < 1`
examples
const results = await map_concurrent_settled(urls, 5, fetch);
for (const [i, result] of results.entries()) {
if (result.status === 'fulfilled') {
console.log(`${urls[i]}: ${result.value.status}`);
} else {
console.error(`${urls[i]}: ${result.reason}`);
}
}