iter-tools-es
Version:
The iterable toolbox
36 lines (32 loc) • 868 B
JavaScript
const {
asyncIterableCurry
} = require('../../internal/async-iterable.js');
const {
raceTo
} = require('./internal/race-to.js');
async function* __asyncInterleaveReady(sources) {
const iterators = sources.map(iterable => iterable[Symbol.asyncIterator]());
const stepPromises = iterators.map((iter, idx) => iter.next().then(step => ({
idx,
step
})));
let ready;
while ((ready = await raceTo(({
step
}) => !step.done, null, stepPromises)) !== null) {
const {
idx,
step
} = ready;
yield step.value;
stepPromises[idx] = iterators[idx].next().then(step => ({
idx,
step
}));
}
}
exports.__asyncInterleaveReady = __asyncInterleaveReady;
const asyncInterleaveReady = /*#__PURE__*/asyncIterableCurry(__asyncInterleaveReady, {
variadic: true
});
exports.asyncInterleaveReady = asyncInterleaveReady;