typescript / intermediate
Snippet
Processing Sequential Tasks with Async Iterators
Async generator functions return an AsyncGenerator interface yielding values asynchronously over time, which can be consumed using the 'for await...of' loop.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
async function* fetchPages(urls: string[]): AsyncGenerator<string, void, unknown> {for (const url of urls) {await new Promise((resolve) => setTimeout(resolve, 50));yield `Content for ${url}`;}}async function processAllPages(urls: string[]) {for await (const pageContent of fetchPages(urls)) {console.log(pageContent);}}
Breakdown
1
async function* fetchPages(urls: string[]): AsyncGenerator<string, void, unknown> {
Declares an asynchronous generator yielding strings and returning void.
2
yield `Content for ${url}`;
Yields a Promise-wrapped value to the consumer for each iteration step.
3
for await (const pageContent of fetchPages(urls)) {
Asynchronously iterates over stream yields as each promise resolves.