const target = document.getElementById("button"); function when( event) { return new Promise((resolve) => { target.addEventListener(event, resolve); }); } when( "click").then(() => { alert("button clicked"); });No entiendo por qué esta función de escucha de eventos no se apaga cuando hace clic más de una vez. A pesar de estar en una promesa, el detector de eventos está "registrado" en el botón. Así que siento que siempre debería apagarse cuando se hace clic.
La función when devuelve una promesa. Esta promesa se resolverá (y causará la alerta) cuando llame el detector de eventos. Debido a que una promesa solo puede resolverse una vez , la alerta solo se activa la primera vez. Después de eso, puede ver console.log('event listener calls') cuando hace clic en el botón, pero la alerta no se activará nuevamente.
const target = document.getElementById("button"); function when( event) { return new Promise((resolve) => { target.addEventListener(event, function() { console.log('event listener calls'); resolve(); }); }); } when( "click").then(() => { alert("button clicked"); }); <button id="button">Click Me!</button>