iter-tools-es
Version:
The iterable toolbox
43 lines (36 loc) • 947 B
JavaScript
const {
asyncIterableCurry
} = require('../../internal/async-iterable.js');
const {
__asyncInterleave
} = require('../$interleave/async-interleave.js');
const {
makeValidateArgs
} = require('./internal/validate-args.js');
async function* asyncByPosition({
start,
step
}, all, ...peekrs) {
start = start % peekrs.length;
for (let i = start; !all.done; i = (i + step) % peekrs.length) {
const peekr = peekrs[i];
if (!peekr.done) {
yield peekr.value;
await peekr.advance();
}
}
}
function __asyncRoundRobin(sources, step = 1, start = 0) {
return __asyncInterleave(sources, asyncByPosition, {
start,
step
});
}
exports.__asyncRoundRobin = __asyncRoundRobin;
const asyncRoundRobin = /*#__PURE__*/asyncIterableCurry(__asyncRoundRobin, {
variadic: true,
minArgs: 0,
maxArgs: 2,
validateArgs: /*#__PURE__*/makeValidateArgs('asyncRoundRobin')
});
exports.asyncRoundRobin = asyncRoundRobin;