@monstermann/fn
Version:
A utility library for TypeScript.
30 lines • 828 B
TypeScript
//#region src/promise/limit.d.ts
interface Limited<T extends unknown[], U> {
(...args: T): Promise<Awaited<U>>;
idle: () => Promise<void>;
}
type LimitOptions = number | {
concurrency: number;
};
/**
* `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
*/
declare function limit<T extends unknown[], U>(fn: (...args: T) => U, options: LimitOptions): Limited<T, U>;
//#endregion
export { Limited, limit };