¿Cómo crear un objeto Generator en JavaScript?
Un objeto generator es retornado después de llamar a una función Generator. Es importante no confundir una función y un objeto Generator.
Función Generator.
function* funcGenerator() {
console.log("inicializado");
yield "a";
console.log("enviado el primer yield");
yield;
console.log("enviado el segundo yield");
yield 123;
console.log("enviado el tercer yield");
return "finished";
}
Objeto Generator.
var objGenerator = funcGenerator();
console.log(objGenerator.next()); // { value: 'a', done: false }
console.log(objGenerator.next()); // { value: undefined, done: false }
console.log(objGenerator.next()); // { value: 123, done: false }
console.log(objGenerator.next()); // { value: 'finished', done: false }
console.log(objGenerator.next()); // { value: undefined, done: true }
¿Como iterar a través del objeto Generator mediante la función next?
Los Objetos Generator pueden ser iterados mediante el método next().
Las funciones del Generator son inicialmente pausadas, y la primera llamada a next() inicia la función Generator. La función Generator entonces se ejecuta hasta que encuentra el primer yield y después se pausa. La posterior llamada anext() resumirá el proceso de ejecución de la función Generator hasta que esta encuentre nuevamente la palabra yield.
El método next()retorna un objeto con dos propiedades.
- done : un valor boleano que indica si la función Generator ha procesado todas las sentencias
yieldo ha alcanzado ya el return. - value : el valor asociado con el yield mas reciente.
Vea como el método next() es utilizado para iterar a través de las sentencias yield.
var objGenerator1 = funcGenerator();
console.log(objGenerator1); // Object { value: 'a', done: false }
var objGenerator2 = funcGenerator();
console.log(objGenerator2); // Object { value: undefined, done: false }
var objGenerator3 = funcGenerator();
console.log(objGenerator3); // Object { value: 123, done: false }
Después de que se han procesado todas las sentencias
next(), la siguiente llamada anext()retornará un objeto con el valor retornado por la función y la propiedad done con valor true. Si la sentencia return es omitida en la función Generator, entonces el valor de la propiedad done seraundefined. Después de que la propiedaddonees retornada comotrue, las llamadas posteriores anext()retornaran un Objeto Generator con la propiedadvaluecomoundefinedydonecomo true. Las sentencias yield posteriores a un return son ignoradas.