Módulo Node.js Events

Java FileMódulos integrados de Node.js


Node.js es un entorno de ejecución de JavaScript basado en eventos, yeventsel módulo events es el núcleo de Node.js para implementar la arquitectura dirigida por eventos. Permite a los desarrolladores crear, emitir y escuchar eventos personalizados, logrando así una estructura de código débilmente acoplada.

En términos simples,eventsel módulo events proporciona un mecanismo que permite que diferentes partes (objetos) se comuniquen entre sí sin necesidad de llamar directamente a los métodos de las demás.


Conceptos fundamentales

Clase EventEmitter

eventsEl núcleo del módulo esEventEmitterla clase EventEmitter; casi todos los objetos de Node.js que pueden emitir eventos heredan de esta clase.

Ejemplo

const EventEmitter = require('events');

Uso básico

1. Crear una instancia de EventEmitter

const myEmitter = new EventEmitter();

2. Emitir el evento

myEmitter.emit('event');
3. Escuchar el evento
myEmitter.on('event', () => {
  console.log('¡El evento se ha disparado!');
});

Explicación detallada de los métodos comunes

on(eventName, listener)

Agrega un listener al final del arreglo de listeners del evento especificado.

Ejemplo

myEmitter.on('greet', (name) => {
  console.log(`Hello, ${name}!`);
});

myEmitter.emit('greet', 'Alice'); // Salida: Hello, Alice!

once(eventName, listener)

Agrega un listener de una sola vez; este listener se disparará como máximo una vez.

Ejemplo

myEmitter.once('welcome', () => {
  console.log('¡Bienvenido a tu primera visita!');
});

myEmitter.emit('welcome'); // Salida: ¡Bienvenido a tu primera visita!
myEmitter.emit('welcome'); // No se imprimirá

emit(eventName[, ...args])

Llama sincrónicamente a cada listener registrado para el evento especificado, ejecutándolos en el orden de registro.

Ejemplo

myEmitter.on('sum', (a, b) => {
  console.log(a + b);
});

myEmitter.emit('sum', 2, 3); // Salida: 5

removeListener(eventName, listener)

Elimina un listener del arreglo de listeners del evento especificado.

Ejemplo

const callback = () => console.log('Evento emitido');
myEmitter.on('event', callback);
myEmitter.removeListener('event', callback);

removeAllListeners([eventName])

Elimina todos los listeners o todos los listeners del evento especificado.

Ejemplo

myEmitter.removeAllListeners('event');

Características avanzadas

Manejo de errores

Las instancias de EventEmitter manejan de manera especial el evento 'error'. Si no hay ningún listener registrado para el evento 'error', cuando se emite dicho evento, se lanza un error y el proceso de Node.js sale.

Ejemplo

myEmitter.on('error', (err) => {
  console.error('Ocurrió un error:', err.message);
});

myEmitter.emit('error', new Error('¡Algo salió mal!'));

Obtener información del listener

Ejemplo

// Obtener el número de listeners del evento especificado
myEmitter.listenerCount('event');

// Obtener el arreglo de listeners del evento especificado
myEmitter.listeners('event');

Establecer el número máximo de listeners

De forma predeterminada, cada evento puede registrar hasta 10 listeners; si se supera esta cantidad, se emite una advertencia.

Ejemplo

myEmitter.setMaxListeners(20); // Establecer en 20

Ejemplo de aplicación práctica

Crear una clase de eventos personalizada

Ejemplo

const EventEmitter = require('events');

class MyClass extends EventEmitter {
  constructor() {
    super();
    this.value = 0;
  }
 
  increment() {
    this.value++;
    this.emit('incremented', this.value);
  }
}

const myInstance = new MyClass();
myInstance.on('incremented', (value) => {
  console.log('Valor incrementado a:', value);
});

myInstance.increment(); // Salida: Valor incrementado a: 1
myInstance.increment(); // Salida: Valor incrementado a: 2

Implementar un bus de eventos simple

Ejemplo

const EventEmitter = require('events');

class EventBus extends EventEmitter {}
const bus = new EventBus();

// Componente A
bus.on('message', (msg) => {
  console.log('Componente A recibió:', msg);
});

// Componente B
bus.emit('message', 'Hello from B');

Mejores prácticas

  1. Convención de nombresEvitar fugas de memoria
  2. Manejo de erroresUso moderado
  3. ResumenEl módulo events de Node.js
  4. es la base de la programación dirigida por eventos; a través de laclase EventEmitter, podemos crear y gestionar fácilmente eventos personalizados. Dominar este módulo es esencial para desarrollar aplicaciones Node.js eficientes y desacopladas. Desde mecanismos simples de notificación hasta arquitecturas de aplicación complejas,

Resumen

Módulos integrados de Node.jseventsOtras extensionesEventEmitterIA pensando...eventsMódulo Node.js querystring

Java FileMódulo Node.js stream

Lista de notas