openbranch
Corrección de bugsSin empezar

Arregla el EventEmitter roto

Los listeners siguen disparando después de llamar off(). Un dashboard en tiempo real recibe actualizaciones fantasma de eventos a los que explícitamente se desuscribió — encuentra el motivo y corrígelo.

ClosuresIgualdad de referenciasArquitectura orientada a eventosGenéricos de TypeScript

Llegó un reporte del equipo de analítica: los componentes del dashboard siguen recibiendo actualizaciones en tiempo real incluso después de llamar off() para desuscribirse de un feed. El EventEmitter que maneja el pipeline de datos en vivo es el sospechoso.

El código compila. TypeScript está conforme. Pero dos de los tres tests están en rojo — y el fallo solo aparece cuando intentas desuscribirte.

La situación

const handler = (v: number) => display(v)

emitter.on<number>("price-update", handler)
emitter.emit("price-update", 42) // ✓ handler llamado

emitter.off<number>("price-update", handler)
emitter.emit("price-update", 99) // ✗ handler sigue llamándose — ¿por qué?

Lo que vas a practicar

  • Cómo JavaScript compara referencias de funciones con ===
  • Por qué envolver una función crea una nueva identidad, aunque el comportamiento sea el mismo
  • El patrón que usan todos los sistemas de eventos (DOM, Node.js, RxJS) para que off() funcione

Listo cuando

  • Los tres tests pasan
  • off() elimina correctamente solo el listener especificado
  • Otros listeners registrados en el mismo evento siguen activos