@monstermann/fn
Version:
A utility library for TypeScript.
33 lines (31 loc) • 735 B
JavaScript
import { queue } from "./queue.js";
//#region src/promise/limit.ts
/**
* `limit(fn, options)`
*
* Limits the concurrency of function execution.
*
* ```ts
* const limitedFetch = limit(fetch, { concurrency: 3 });
* const limitedFetch2 = limit(fetch, 3); // Shorthand
*
* const results = await Promise.all([
* // At most 3 fetch calls are executed at any time
* limitedFetch("/api/1"),
* limitedFetch("/api/2"),
* limitedFetch("/api/3"),
* limitedFetch("/api/4"),
* ]);
*
* // Wait for queue to become idle
*/
function limit(fn, options) {
const q = queue(options);
const limited = function(...args) {
return q.add(() => fn(...args));
};
limited.idle = q.idle;
return limited;
}
//#endregion
export { limit };