DEV Community

Agustín Rafael Zárate
Agustín Rafael Zárate

Posted on

Funciones generadoras

Una función generadora es una función especial en JavaScript que puede ser pausada y reanudada en cualquier momento. Esto nos permite tener un mayor control sobre la ejecución de sus sentencias.

Cuando se invocan este tipo de funciones, no se ejecutan, sino que quedan "dormidas". Estas devuelven un objeto iterador en el cual a través del método next() podremos ejecutar de manera controlada las sentencias o acciones a realizar.

const generatorFunction = function* () {
 console.log('Hi')
};
const iterator = generatorFunction();

console.log(iterator) //retorna el objeto iterador generatorFunction{<suspended>}
console.log(iterator.next()) // Ejecuta la función mostrando 'Hi' en la consola y retorna el siguiente objeto {value: undefined, done: true}, siendo value el valor que retorna la función y done el estado de ejecución de dicha función.

//Si volvemos a llamar al iterador
console.log(iterator) // generatorFunction{<closed>}

Enter fullscreen mode Exit fullscreen mode

yield

yield representa algo a producir, permite que las funciones generadoras produzcan una secuencia de valores de manera controlada. Puede haber múltiples yield en una función generadora, y cada llamada a next() devuelve el siguiente valor en la secuencia.

const generatorFunction = function* () {
 yield 1
 yield 2
};
const iterator = generatorFunction();

console.log(iterator.next()) // {value: 1, done: false}
console.log(iterator.next()) // {value: 2, done: false}
console.log(iterator.next()) // {value: undefined, done: true}
Enter fullscreen mode Exit fullscreen mode

En resumen, las funciones generadoras son una herramienta valiosa en JavaScript que brinda mayor control y claridad en el flujo de ejecución de un programa. Son especialmente útiles para simplificar el código asincrónico, controlar el flujo de datos y generar secuencias de valores bajo demanda. Las funciones generadoras se utilizan ampliamente en bibliotecas como Redux-Saga para manejar flujos de trabajo complejos, operaciones asíncronas y la sincronización de acciones en aplicaciones de React/Redux.

Top comments (0)