@altano/tiny-async-pool
Version:
Run multiple promise-returning & async functions with limited concurrency using native ES9
26 lines (25 loc) • 622 B
JavaScript
async function* doWorkAndYield(concurrentCount, iterable, iteratorFn) {
const executing = /* @__PURE__ */ new Set();
async function consume() {
const [promise, value] = await Promise.race(executing);
executing.delete(promise);
return value;
}
for (const item of iterable) {
const result = iteratorFn(item, iterable);
const promise = result.then((value) => [
promise,
value
]);
executing.add(promise);
if (executing.size >= concurrentCount) {
yield await consume();
}
}
while (executing.size) {
yield await consume();
}
}
export {
doWorkAndYield
};