const globalInput = new Promise(resolve => { function callback(msg) { client.off('message', (msg) => callback(msg)); resolve(msg.content); } client.on('message', (msg) => callback(msg)); });Aquí he usado el emisor de eventos de mensajes para devolver el contenido del mensaje en una promesa resuelta, y he usado client.off. Sin embargo, incluso después de esto, sigo recibiendo los 11 detectores de eventos adjuntos a la advertencia del cliente. ¿Dónde me estoy equivocando? Y sí, esta es la única variable que realmente adjunta el emisor de eventos.
.off() requiere que le pases la referencia de función idéntica (no una función diferente que sea una copia idéntica). Por lo tanto, puede corregir su código haciendo que el primer controlador de mensajes sea una función local separada a la que luego puede referirse tanto en .on() como .off() :
const globalInput = new Promise(resolve => { function handler(msg) { client.off('message', handler); resolve(msg.content); } client.on('message', handler); }); FYI, también puede usar .once() y se encargará de la eliminación automáticamente.
const globalInput = new Promise(resolve => { client.once('message', msg => { resolve(msg.content); }); });