UNPKG

@thi.ng/transducers-async

Version:

Async versions of various highly composable transducers, reducers and iterators

33 lines (32 loc) 820 B
async function* sidechain(src, side, opts) { const { lastOnly = true } = opts || {}; const $iter = src[Symbol.asyncIterator](); const $side = side[Symbol.asyncIterator](); const promises = [ $iter.next().then((res) => [res]), $side.next().then((res) => [res, true]) ]; let buf = []; while (true) { const [res, side2] = await Promise.race(promises); if (res.done) return; if (side2) { promises[1] = $side.next().then((res2) => [res2, true]); if (!buf.length) continue; if (lastOnly) { yield buf[0]; buf.length = 0; } else { yield buf; buf = []; } } else { promises[0] = $iter.next().then((res2) => [res2]); if (lastOnly) buf[0] = res.value; else buf.push(res.value); } } } export { sidechain };