Cómo eliminar listeners en JavaScript con AbortController

Este es el segundo post de una mini-serie sobre los AbortController de JavaScript, esta vez sobre los listeners de eventos.

Cómo eliminar listeners en JavaScript con AbortController
Photo by Marco Biondi / Unsplash

Este es el segundo post de una mini-serie sobre los AbortController de JavaScript. Como ya dije en este post, me parece una de las características de JS que se debería conocer mucho más que actualmente.

Otra de las funcionalidades que permite implementar el AbortController es la de dejar de escuchar eventos. Me explico.

Normalmente, en JS podemos escuchar eventos de la siguiente forma:

confirmButton.addEventListener('click', function () {
	console.log('do something');
});

En algunos casos podemos querer eliminar el listener que hemos creado anteriormente (por ejemplo, solo quiero permitir la descarga una vez). Para hacer esto normalmente tenemos que declarar la función fuera del listener, para poder pasarla como referencia:

function downloadItem() {
	// ...
}

downloadButton.addEventListener('click', downloadItem);

// más adelante

downloadButton.removeEventListener('click', downloadItem);

Sin embargo, también podemos usar el AbortController para eliminar el listener de forma tal vez más cómoda:

const controller = new AbortController();

downloadButton.addEventListener('click', () => {
	console.log('downloading...');
}, { signal: controller.signal });

// más adelante
controller.abort(); // esto desactiva el listener

Ambas opciones son completamente válidas, aunque a mí personalmente me gusta mucho el uso del AbortController ya que es algo reutilizable entre varios componentes de la aplicación.