UNPKG

asyncerator

Version:

Provide supporting types for AsyncIterable/AsyncIterableIterators, promisified stream.pipeline implementation, and Array-like utility operators, sources and sinks.

54 lines (53 loc) 2.66 kB
// src/operator/sequence.ts function sequence_default(sequenceFunction) { return async function* (iterator) { const queue = []; let complete = false; let hasThrown = false; let errorThrown; (async () => { await new Promise((resolve) => { setTimeout(resolve, 0); }); let currentIndex = 0; while (!complete && !hasThrown) { queue.push(await sequenceFunction(currentIndex++)); await new Promise((resolve) => { setTimeout(resolve, 0); }); } })().catch((error) => { hasThrown = true; errorThrown = error; }); const passThroughProducer = (async () => { for await (const item of iterator) { if (hasThrown) { break; } queue.push(item); } })().catch((error) => { hasThrown = true; errorThrown = error; }).finally(() => { complete = true; }); while (!complete && !hasThrown) { if (queue.length === 0) { await new Promise((resolve) => { setTimeout(resolve, 0); }); } yield* queue.splice(0, queue.length); } await passThroughProducer; if (hasThrown) { throw errorThrown; } }; } export { sequence_default as default }; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL29wZXJhdG9yL3NlcXVlbmNlLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQW9CZSxTQUFSLGlCQUF5QixrQkFBNkU7QUFDM0csU0FBTyxpQkFBaUIsVUFBOEI7QUFDcEQsVUFBTSxRQUFpQixDQUFDO0FBQ3hCLFFBQUksV0FBVztBQUNmLFFBQUksWUFBWTtBQUNoQixRQUFJO0FBT0osS0FBQyxZQUFZO0FBSVgsWUFBTSxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzdCLG1CQUFXLFNBQVMsQ0FBQztBQUFBLE1BQ3ZCLENBQUM7QUFFRCxVQUFJLGVBQWU7QUFFbkIsYUFBTyxDQUFDLFlBQVksQ0FBQyxXQUFXO0FBRTlCLGNBQU0sS0FBSyxNQUFNLGlCQUFpQixjQUFjLENBQUM7QUFJakQsY0FBTSxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzdCLHFCQUFXLFNBQVMsQ0FBQztBQUFBLFFBQ3ZCLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRixHQUFHLEVBQUUsTUFBTSxDQUFDLFVBQW1CO0FBQzdCLGtCQUFZO0FBQ1osb0JBQWM7QUFBQSxJQUNoQixDQUFDO0FBT0QsVUFBTSx1QkFBdUIsWUFBWTtBQUN2Qyx1QkFBaUIsUUFBUSxVQUFVO0FBR2pDLFlBQUksV0FBVztBQUNiO0FBQUEsUUFDRjtBQUNBLGNBQU0sS0FBSyxJQUFJO0FBQUEsTUFDakI7QUFBQSxJQUNGLEdBQUcsRUFDQSxNQUFNLENBQUMsVUFBbUI7QUFDekIsa0JBQVk7QUFDWixvQkFBYztBQUFBLElBQ2hCLENBQUMsRUFDQSxRQUFRLE1BQU07QUFDYixpQkFBVztBQUFBLElBQ2IsQ0FBQztBQU9ILFdBQU8sQ0FBQyxZQUFZLENBQUMsV0FBVztBQUM5QixVQUFJLE1BQU0sV0FBVyxHQUFHO0FBR3RCLGNBQU0sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM3QixxQkFBVyxTQUFTLENBQUM7QUFBQSxRQUN2QixDQUFDO0FBQUEsTUFDSDtBQUdBLGFBQU8sTUFBTSxPQUFPLEdBQUcsTUFBTSxNQUFNO0FBQUEsSUFDckM7QUFFQSxVQUFNO0FBR04sUUFBSSxXQUFXO0FBQ2IsWUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==