atee.js 645 B

1234567891011121314151617181920
  1. export function atee(iter, length = 2) {
  2. const buffers = Array.from({ length }, () => []);
  3. return buffers.map(async function* makeIter(buffer) {
  4. while (true) {
  5. if (buffer.length === 0) {
  6. const result = await iter.next();
  7. for (const buffer of buffers) {
  8. buffer.push(result);
  9. }
  10. }
  11. else if (buffer[0].done) {
  12. return;
  13. }
  14. else {
  15. // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
  16. yield buffer.shift().value;
  17. }
  18. }
  19. });
  20. }