Skip to content

Instantly share code, notes, and snippets.

@tomfun
Created February 25, 2020 11:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tomfun/79eb67cff8a50364cf92015357e600fa to your computer and use it in GitHub Desktop.
Save tomfun/79eb67cff8a50364cf92015357e600fa to your computer and use it in GitHub Desktop.
Example of async generators with typescript
import { generateSequence } form './simple'
class NumberTransfrormer {
transform = async function*(gen: AsyncGenerator<number>) {
for await (const n of gen) {
yield n * 2;
}
}
}
// run
(async () => {
const multiplier = new HeaderFooterTransfrormer();
for await (const value of multiplier.transform(multiplier.transform(generateSequence(1, 5)))) {
console.log(value);
}
})();
import { generateSequence } form './simple'
class NumberTransfrormer {
async *transform(gen: AsyncGenerator<number>): AsyncGenerator<number> {
for await (const n of gen) {
yield n * 2;
}
}
}
// run
(async () => {
const multiplier = new HeaderFooterTransfrormer();
for await (const value of multiplier.transform(multiplier.transform(generateSequence(1, 5)))) {
console.log(value);
}
})();
export async function* generateSequence(start: number, end: number): AsyncGenerator<number> {
for (let i = start; i <= end; i++) {
await new Promise(resolve => setTimeout(resolve, 1000));
yield i as number;
}
}
// run
(async () => {
for await (const value of generateSequence(1, 5)) {
console.log(value); // 1, then 2, then 3, then 4, then 5
}
})();
@tomfun
Copy link
Author

tomfun commented Feb 25, 2020

video

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment