Generators: Iterar a través de una función Generator

Generators: Iterar a través de una función Generator

¿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 yield o 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 a next() 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 sera undefined. Después de que la propiedad done es retornada como true, las llamadas posteriores a next() retornaran un Objeto Generator con la propiedad value como undefined y done como true. Las sentencias yield posteriores a un return son ignoradas.

VPN

  • Ir a la oferta de NordVPN

Moda

Accesorios