¿Sabes qué es el EventEmitter?

| Última modificación: 18 de marzo de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

En el mundo del desarrollo web, especialmente en el ámbito de la programación y la tecnología, uno de los conceptos fundamentales que los desarrolladores deben conocer es el EventEmitter. Es una poderosa herramienta que permite gestionar eventos en aplicaciones y aplicar la lógica de comunicación entre componentes de manera efectiva. Veamos cómo funciona.

¿Componente hijo y componente padre?

El EventEmitter se utiliza comúnmente en la comunicación entre componentes en aplicaciones web. En este contexto, se pueden considerar los componentes como hijos y padres. El componente hijo puede emitir eventos, mientras que el componente padre actúa como el oyente (event listener) que está suscrito a esos eventos.

¿Qué es exactamente el EventEmitter?

Event Emitter es un término que proviene de la programación en JavaScript y hace referencia a un patrón de diseño o una funcionalidad proporcionada por algunas bibliotecas o clases en el lenguaje. Es un mecanismo que permite la comunicación entre diferentes componentes de un programa mediante la emisión y escucha de eventos.

En Node.js, EventEmitter es una clase que está disponible como parte del módulo events. Permite que los objetos puedan emitir eventos y registrar oyentes para esos eventos. Es especialmente útil para implementar patrones de diseño basados en eventos, como el patrón Observador (Observer) o el patrón Publicador/Suscriptor (Publisher/Subscriber).

EventEmitter

La idea básica detrás de EventEmitter es que un objeto puede emitir eventos cuando ocurren ciertas acciones o cambios en su estado. Otros objetos que estén interesados en saber cuando ocurren estos eventos pueden registrarse como oyentes para recibir notificaciones cuando el evento sea emitido.

¿Cómo funciona el EventEmitter?

Cuando se desea crear un Event Emitter, simplemente se instancia como un objeto. Luego, se pueden definir eventos personalizados mediante la función emit() y suscribirse a ellos utilizando on() u once() para eventos de escucha única.

Para usar Event Emitter, primero debes importar el módulo events en tu script:

const EventEmitter = require('events');

Luego, puedes crear una instancia de EventEmitter:

const myEmitter = new EventEmitter();

A continuación, puedes registrar suscriptores para eventos específicos utilizando el método on o addListener:

myEmitter.on('evento', (parametro1, parametro2, ...) => {
  // Lógica para manejar el evento
});

Cuando se emita el evento “evento”, la función proporcionada como segundo argumento se ejecutará.

Para emitir el evento desde cualquier parte de tu código, utiliza el método emit:

myEmitter.emit('evento', parametro1, parametro2, ...);

Todos los suscriptores registrados para ese evento se activarán y recibirán los parámetros proporcionados.

A continuación, te presentamos un ejemplo más completo:

const EventEmitter = require('events');

// Creamos una instancia del EventEmitter
const myEmitter = new EventEmitter();

// Suscriptor para el evento 'saludar'
myEmitter.on('saludar', (nombre) => {
  console.log(`¡Hola, ${nombre}!`);
});

// Suscriptor para el evento 'despedir'
myEmitter.on('despedir', (nombre) => {
  console.log(`Hasta luego, ${nombre}!`);
});

// Emitimos los eventos
myEmitter.emit('saludar', 'Juan');
myEmitter.emit('despedir', 'María');

Al ejecutar este código, obtendríamos la siguiente salida:

¡Hola, Juan!
Hasta luego, María!

Es importante tener en cuenta que tanto el emisor de eventos como el objeto Event Emitter deben compartir la misma instancia para que la comunicación entre componentes funcione correctamente.

Ejemplo práctico de uso del EventEmitter

Un ejemplo sencillo para comprender mejor su uso es el de una aplicación que simula una llamada de teléfono. Al emitir el evento “llamada de teléfono”, el componente padre puede suscribirse y responder con una vibración y el sonido “ring ring” cada vez que recibe esa notificación. Además, se puede adjuntar información adicional sobre la llamada, como el nombre de la persona que llama.

const EventEmitter = require('events');

const emisor = new EventEmitter();

// Suscripción al evento "llamada de teléfono"
emisor.on('llamada de teléfono', (quienLlama) => {
    if (quienLlama === 'mi madre') {
        return; // No suena el teléfono si mi madre llama
    }
    console.log('Ring ring'); // Suena el teléfono
    console.log('Vibrando...');
});

// Emitir el evento "llamada de teléfono"
emisor.emit('llamada de teléfono', 'un número desconocido');
emisor.emit('llamada de teléfono', 'mi madre');

El EventEmitter en KeepCoding

Como se puede apreciar, el Event Emitter es una herramienta valiosa para mejorar la comunicación entre componentes en el desarrollo web. En KeepCoding, este concepto y muchos otros se enseñas de manera teórica y aplicada en el Desarrollo Web Full Stack Bootcamp.

Si quieres adentrarte en el emocionante mundo del desarrollo web, te invitamos a unirte a nuestro bootcamp, donde aprenderás más no solo sobre el EventEmitter, sino también acerca de una amplia gama de habilidades y tecnologías de vanguardia. Al finalizar la formación, te habrás convertido en un profesional altamente demandado en el sector tecnológico. ¡No pierdas esta oportunidad de cambiar tu vida y apúntate para enfocar tu futuro en el mundo del desarrollo web!

Alberto Casero

Alberto Casero es CTO en Watium, Fundador de Kas Factory & Coordinador del Bootcamp en Desarrollo Web.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Desarrollo Web

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado