UNPKG

fast-merge-async-iterators

Version:
40 lines 1.55 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const _1 = __importDefault(require(".")); async function* generator(name, dt) { try { for (let i = 0;; i++) { console.log(`${name} yielded ${i}`); yield `${name}: ${i}`; await new Promise((resolve) => setTimeout(resolve, dt)); } } finally { console.log(`Closing ${name} (doing some cleanup)`); await new Promise((resolve) => setTimeout(resolve, 100)); } } async function* caller() { // JS does a good job of propagating iterator close operation (i.e. // calling `.return()` an iterator is used in `yield*` or `for await`). yield* (0, _1.default)("iters-close-wait", generator("A", 222), generator("B", 555)); // Available modes: // - "iters-noclose" (does not call inner iterators' `return` method) // - "iters-close-nowait" (calls `return`, but doesn't await nor throw) // - "iters-close-wait" (calls `return` and awaits for inners to finish) } (async () => { for await (const message of caller()) { if (message.includes("2")) { // This `break` closes the merged iterator, and the signal is // propagated to all inner iterators. break; } console.log(`Received from ${message}`); } console.log("Finishing"); })(); //# sourceMappingURL=example.js.map