2531
2532
public static tee<T>(iterable: AsyncIterable<T>): [AsyncIterableProducer<T>, AsyncIterableProducer<T>] {
2533
>
let emitter1: AsyncIterableEmitter<T> | undefined;
async.ts
2534
>
let emitter2: AsyncIterableEmitter<T> | undefined;
2535
>
2536
>
const defer = new DeferredPromise<void>();
2537
>
2538
>
const start = async () => {
2539
>
if (!emitter1 || !emitter2) {
2540
>
return; // not yet ready
2541
>
}
2542
>
try {
2543
>
for await (const item of iterable) {
2544
>
emitter1.emitOne(item);
2545
>
emitter2.emitOne(item);
2546
>
}
2547
>
} catch (err) {
2548
emitter1.reject(err);
2549
emitter2.reject(err);
2551
>
defer.complete();
2552
>
}
2553
>
};
2554
>
2555
>
const p1 = new AsyncIterableProducer<T>(async (emitter) => {
2556
>
emitter1 = emitter;
2557
>
start();
2558
>
return defer.p;
2559
>
});
2560
>
const p2 = new AsyncIterableProducer<T>(async (emitter) => {
2561
>
emitter2 = emitter;
2562
>
start();
2563
>
return defer.p;
2564
>
});
2565
>
return [p1, p2];
2566
>
}
2567
2568
public map<R>(mapFn: (item: T) => R): AsyncIterableProducer<R> {