@thi.ng/transducers-async
Version:
Async versions of various highly composable transducers, reducers and iterators
19 lines (18 loc) • 509 B
JavaScript
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
};