Skip to content

Instantly share code, notes, and snippets.

@jonstoked
Last active April 30, 2024 20:38
Show Gist options
  • Save jonstoked/2ed72e5b6a259ae9bc558bb4ade92b81 to your computer and use it in GitHub Desktop.
Save jonstoked/2ed72e5b6a259ae9bc558bb4ade92b81 to your computer and use it in GitHub Desktop.
Hello, world!
function delayExecution(resolver) {
return new Promise((resolve) => setTimeout(() => resolve(resolver), 1000));
}
function* messageGenerator() {
yield 'H';
yield 'e';
yield 'l';
yield 'l';
yield 'o';
yield ',';
yield ' ';
yield 'w';
yield 'o';
yield 'r';
yield 'l';
yield 'd';
yield '!';
}
async function* asyncMessageIterator(generator) {
for (let letter of generator()) {
await delayExecution(letter);
yield letter;
}
}
function MessageConstructor() {
this.parts = [];
this[Symbol.asyncIterator] = async function* () {
const iterator = asyncMessageIterator(messageGenerator);
for await (let part of iterator) {
this.parts.push(part);
yield part;
}
};
}
async function assembleMessage() {
const messageBuilder = new MessageConstructor();
let message = '';
for await (let part of messageBuilder) {
message += part;
}
return message;
}
assembleMessage().then(console.log);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment