Add promiseMapSettledWithLimit utility

GitOrigin-RevId: e34102de17f28e43deb383d630088c6e753e2ec1
This commit is contained in:
Andrew Rumble 2025-03-06 16:08:43 +00:00 committed by Copybot
parent ecc2f1f544
commit d04bfbcdea

View file

@ -13,6 +13,7 @@ module.exports = {
expressify,
expressifyErrorHandler,
promiseMapWithLimit,
promiseMapSettledWithLimit,
}
/**
@ -264,3 +265,19 @@ async function promiseMapWithLimit(concurrency, array, fn) {
const limit = pLimit(concurrency)
return await Promise.all(array.map(x => limit(() => fn(x))))
}
/**
* Map values in `array` with the async function `fn`
*
* Limit the number of unresolved promises to `concurrency`.
*
* @template T, U
* @param {number} concurrency
* @param {Array<T>} array
* @param {(T) => Promise<U>} fn
* @return {Promise<Array<PromiseSettledResult<U>>>}
*/
function promiseMapSettledWithLimit(concurrency, array, fn) {
const limit = pLimit(concurrency)
return Promise.allSettled(array.map(x => limit(() => fn(x))))
}