Function earlyZipReadableStreams
- early
Zip <T>(...streams): ReadableStream<T>Readable Streams Type Parameters
Parameters
Rest...streams: ReadableStream<T>[]An iterable of
ReadableStreams to merge.
Returns ReadableStream<T>
A
ReadableStreamthat will emit the zipped chunksExample: Zip 2 streams with the same length
import { earlyZipReadableStreams } from "@std/streams/early-zip-readable-streams";
import { assertEquals } from "@std/assert";
const stream1 = ReadableStream.from(["1", "2", "3"]);
const stream2 = ReadableStream.from(["a", "b", "c"]);
const zippedStream = earlyZipReadableStreams(stream1, stream2);
assertEquals(
await Array.fromAsync(zippedStream),
["1", "a", "2", "b", "3", "c"],
);Example: Zip 2 streams with different length (first one is shorter)
import { earlyZipReadableStreams } from "@std/streams/early-zip-readable-streams";
import { assertEquals } from "@std/assert";
const stream1 = ReadableStream.from(["1", "2"]);
const stream2 = ReadableStream.from(["a", "b", "c", "d"]);
const zippedStream = earlyZipReadableStreams(stream1, stream2);
// The first stream ends before the second one. When the first stream ends,
// the second one is cancelled and no more data is read or added to the
// zipped stream.
assertEquals(
await Array.fromAsync(zippedStream),
["1", "a", "2", "b"],
);Example: Zip 2 streams with different length (first one is longer)
import { earlyZipReadableStreams } from "@std/streams/early-zip-readable-streams";
import { assertEquals } from "@std/assert";
const stream1 = ReadableStream.from(["1", "2", "3", "4"]);
const stream2 = ReadableStream.from(["a", "b"]);
const zippedStream = earlyZipReadableStreams(stream1, stream2);
// The second stream ends before the first one. When the second stream ends,
// the first one is cancelled, but the chunk of "3" is already read so it
// is added to the zipped stream.
assertEquals(
await Array.fromAsync(zippedStream),
["1", "a", "2", "b", "3"],
);Example: Zip 3 streams
import { earlyZipReadableStreams } from "@std/streams/early-zip-readable-streams";
import { assertEquals } from "@std/assert";
const stream1 = ReadableStream.from(["1"]);
const stream2 = ReadableStream.from(["a", "b"]);
const stream3 = ReadableStream.from(["A", "B", "C"]);
const zippedStream = earlyZipReadableStreams(stream1, stream2, stream3);
assertEquals(
await Array.fromAsync(zippedStream),
["1", "a", "A"],
);
Merge multiple streams into a single one, taking order into account, and each stream will wait for a chunk to enqueue before the next stream can append another chunk.
If a stream ends before other ones, the others will be cancelled after the last chunk of said stream is read. See the examples below for more comprehensible information. If you want to continue reading the other streams even after one of them ends, use
zipReadableStreams.