UNPKG

@thi.ng/transducers-async

Version:

Async versions of various highly composable transducers, reducers and iterators

19 lines (18 loc) 509 B
import { __inflightIters, __iterNext, __iterRemove } from "./internal/iter.js"; async function* merge(src) { const iters = src.map((v, id) => ({ id, iter: v[Symbol.asyncIterator]() })); const promises = __inflightIters(iters); while (true) { const { iter, res } = await Promise.race(promises); if (res.done) { promises.splice(iter.id, 1); if (__iterRemove(iters, iter.id)) return; } else { yield res.value; __iterNext(promises, iter); } } } export { merge };