UNPKG

@altano/tiny-async-pool

Version:

Run multiple promise-returning & async functions with limited concurrency using native ES9

26 lines (25 loc) 622 B
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 };