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
JavaScript
// 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==