MuxAsyncIterator

import { MuxAsyncIterator } from "jsr:@ende/async";

class

class MuxAsyncIterator<T> implements AsyncIterable<T>

Multiplexes multiple async iterators into a single stream. It currently makes an assumption that the final result (the value returned and not yielded from the iterator) does not matter; if there is any result, it is discarded.

Example: Usage

import { MuxAsyncIterator } from "@ende/async/mux-async-iterator";
import { assertEquals } from "@ende/assert";

async function* gen123(): AsyncIterableIterator<number> {
  yield 1;
  yield 2;
  yield 3;
}

async function* gen456(): AsyncIterableIterator<number> {
  yield 4;
  yield 5;
  yield 6;
}

const mux = new MuxAsyncIterator<number>();
mux.add(gen123());
mux.add(gen456());

const result = await Array.fromAsync(mux);

assertEquals(result, [1, 4, 2, 5, 3, 6]);

Methods

add

add(iterable: AsyncIterable<T>): void

Add an async iterable to the stream.

iterable: AsyncIterable<T>

The async iterable to add.

Example: Usage

import { MuxAsyncIterator } from "@ende/async/mux-async-iterator";
import { assertEquals } from "@ende/assert";

async function* gen123(): AsyncIterableIterator<number> {
  yield 1;
  yield 2;
  yield 3;
}

const mux = new MuxAsyncIterator<number>();
mux.add(gen123());

const result = await Array.fromAsync(mux.iterate());

assertEquals(result, [1, 2, 3]);

iterate

iterate(): AsyncIterableIterator<T>

Returns an async iterator of the stream.

Returns

the async iterator for all the added async iterables.

Example: Usage

import { MuxAsyncIterator } from "@ende/async/mux-async-iterator";
import { assertEquals } from "@ende/assert";

async function* gen123(): AsyncIterableIterator<number> {
  yield 1;
  yield 2;
  yield 3;
}

const mux = new MuxAsyncIterator<number>();
mux.add(gen123());

const result = await Array.fromAsync(mux.iterate());

assertEquals(result, [1, 2, 3]);

[Symbol.asyncIterator]

[Symbol.asyncIterator](): AsyncIterator<T>

Implements an async iterator for the stream.

Returns

the async iterator for all the added async iterables.

Example: Usage

import { MuxAsyncIterator } from "@ende/async/mux-async-iterator";
import { assertEquals } from "@ende/assert";

async function* gen123(): AsyncIterableIterator<number> {
  yield 1;
  yield 2;
  yield 3;
}

const mux = new MuxAsyncIterator<number>();
mux.add(gen123());

const result = await Array.fromAsync(mux);

assertEquals(result, [1, 2, 3]);

Source