- Learning TypeScript 2.x
- Remo H. Jansen
- 175字
- 2025-04-04 17:02:05
Delegating to another generator (yield*)
We can use the yield* expression to delegate from one generator to another. The following code snippet defines two generator functions named g1 and g2. The g2 generator uses the yield* expression to delegate the iteration to the iterator created by g1:
function* g1() { yield 2; yield 3; yield 4; } function* g2() { yield 1; yield* g1(); yield 5; } var iterator1 = g2(); console.log(iterator1.next()); // {value: 1, done: false} console.log(iterator1.next()); // {value: 2, done: false} console.log(iterator1.next()); // {value: 3, done: false} console.log(iterator1.next()); // {value: 4, done: false} console.log(iterator1.next()); // {value: 5, done: false} console.log(iterator1.next()); // {value: undefined, done: true}
The yield* expression can also be used to delegate the iteration to iterables, such as arrays:
function* g2() { yield 1; yield* [2, 3, 4]; yield 5; } var iterator = g2(); console.log(iterator.next()); // {value: 1, done: false} console.log(iterator.next()); // {value: 2, done: false} console.log(iterator.next()); // {value: 3, done: false} console.log(iterator.next()); // {value: 4, done: false} console.log(iterator.next()); // {value: 5, done: false} console.log(iterator.next()); // {value: undefined, done: true}