Qué significa MaxListenersExceededWarning y cómo solucionarlo
Referencia del error
MaxListenersExceededWarning
Lenguaje
Severidad
BajaCuándo ocurre
Node.js emite esta advertencia cuando se agregan más de 10 escuchadores (el máximo predeterminado) a un solo evento en un EventEmitter.
Posibles soluciones
Elimina los escuchadores cuando ya no sean necesarios con .off() o .removeListener(). Usa .once() para escuchadores de un solo uso. Si genuinamente necesitas más de 10 escuchadores, llama a emitter.setMaxListeners(n). Trata la advertencia como una señal para revisar el ciclo de vida de tus escuchadores.
Más detalles
Node.js emite esta advertencia cuando se agregan más de 10 escuchadores (el máximo predeterminado) a un solo evento en un EventEmitter. Es una advertencia, no un error, diseñada para ayudar a detectar posibles fugas de memoria por la falta de eliminación de escuchadores.
Por qué ocurre
- •Los escuchadores se agregan en un bucle o en cada solicitud sin ser eliminados.
- •Una función que adjunta un escuchador se llama múltiples veces sin limpieza.
- •Librerías de terceros adjuntan escuchadores a emisores compartidos sin eliminarlos.
Posibles soluciones
Elimina los escuchadores cuando ya no sean necesarios con .off() o .removeListener(). Usa .once() para escuchadores de un solo uso. Si genuinamente necesitas más de 10 escuchadores, llama a emitter.setMaxListeners(n). Trata la advertencia como una señal para revisar el ciclo de vida de tus escuchadores.
Ejemplos
Código que causa el error
const EventEmitter = require("events");
const emitter = new EventEmitter();
for (let i = 0; i < 20; i++) {
emitter.on("data", () => console.log("received"));
}Error en la terminal
(node:12345) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 data listeners added to [EventEmitter]. Use emitter.setMaxListeners() to increase limit
Código corregido
const EventEmitter = require("events");
const emitter = new EventEmitter();
function handleData() {
console.log("received");
}
emitter.on("data", handleData);
// When done:
emitter.off("data", handleData);Practica en inglés
¿Cómo le explicarías un MaxListenersExceededWarning a un compañero dev? Elige la frase correcta:
"I hit an error...
¿Listo para practicar tu inglés en el trabajo?
Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.
Prueba Lingua-e gratis