ES6 – yield keyword and calling other generators

Hi, the “yield” keyword inside a generator function takes an iterable object as the expression and iterates it to yield its values.

Example of how “yield” works:

function* my_first_generator_function() {
  yield 100;
  yield 200;
}

let generator = my_first_generator_function();

console.log("value --->", generator.next().value);
console.log("value --->", generator.next().value);
console.log("done --->", generator.next().done);

Result:

Calling other generators inside a generator

Yes, is possible to call other generators inside other generators and to do that we need to use yield* and the name of the generator that we want to execute, take a look of this code example:

function* my_first_generator_function() {
  yield 100;
  yield 200;
  yield* my_second_generator_function();
  yield* [400, 500, 600];
}

function* my_second_generator_function() {
  yield "Hi there!";
  yield "Im in the second generator!";
}

let generator = my_first_generator_function();

console.log("value --->", generator.next().value); // 100
console.log("value --->", generator.next().value); // 200
console.log("value --->", generator.next().value); // Hi there!
console.log("value --->", generator.next().value); // I'm in the second generator!
console.log("value --->", generator.next().value); // 400
console.log("value --->", generator.next().value); // 500
console.log("value --->", generator.next().value); // 600
console.log("done --->", generator.next().done); // true - because theres is not more values in the generator function

Result:

By Cristina Rojas.