nestjs-appwrite
Version:
Easier Appwrite integration for your NestJS application.
25 lines (21 loc) • 760 B
text/typescript
export const executePromisesLimited = async <T>(iterable: Iterable<any | PromiseLike<any>>, concurrencyLimit: number): Promise<T[]> => {
const iterator = iterable[Symbol.iterator]();
let isDone = false;
let promises: PromiseLike<any>[] = [];
const result: any[] = [];
while (!isDone) {
const { value, done } = iterator.next();
isDone = Boolean(done);
promises.push(value);
if (promises.length >= concurrencyLimit) {
const promiseResults = await Promise.all(promises.map(promise => promise));
result.push(...promiseResults);
promises = [];
}
}
if (promises.length) {
const promiseResults = await Promise.all(promises.map(promise => promise));
result.push(...promiseResults);
}
return result;
}