Las tareas asíncronas son el pan de cada día para un programador web. 👩🏻💻
Tareas asíncronas, como cuando usamos fetch para comunicarnos con el servidor desde el navegador. 🧖🏻♂️
Estas tareas pueden costar mucho tiempo o recursos y es bueno siempre poder cancelarlas. Una manera moderna de cancelar una petición fetch por ejemplo, es con la AbortController API. 💥
Esta API se introdujo en el 2017 y desde entonces podemos usar una señal para cancelar todas las promesas necesarias. ☑️
En esta entrada, te voy mostrar cómo se usa esta API y de paso te muestro cómo crear tu propio hook para usar un fetch cancelable. 🤯
🧩 Entendiendo las piezas
Si estás familiarizada con fetch, puede que sepas que le podemos pasar una señal del tipo AbortSignal. Así, si se aborta desde el controlador, la petición fetch se cancelará también.
Como ves, basta con pasar la señal en la configuración del fetch. ¡Genial! 🧞♂️
🎬 ¿Te está gustando este contenido? Tenemos más tutoriales en video en nuestro canal de YouTube.
🌎 Caso real de uso
Uno de los ejemplos más comunes que encontrarás online es el de cancelar un request previo en caso de que una nueva letra se añada al buscador, es decir, podemos cancelar conforme se usa el teclado. ⌨️
Así, podemos abortar desde cualquier parte de nuestro programa o componente UI. Mira…
⏏️ Otros ejemplos
Por ejemplo, si has estado creando tareas asíncronas dentro de un componente de React, podrías cancelar todos de un jalón si el componente es desmontado, dentro de un useEffect.
Podemos compartir la señal con diferentes peticiones fetch, pero ten cuidado, quizá prefieras usar una señal para cada petición. 🥋
🎶 Algunos tips
Muchas veces queremos usar esta misma señal dentro de nuestro propio código.
Podemos colocarle un listener y hacer lo que necesitemos hacer al cancelar.
Mi parte favorita: Creando un custom hook 🪝
Vamos a meter todo esto a un hook, para poder usarlo en cualquiera de nuestros componentes, así:
Para ello, vamos a colocar el ref que guardará la señal y un estado que guardará los datos conseguidos.
¿Serías capas de añadir los estados que hacen falta: isLoading y error?
Mientras, ahora tenemos un fetch abortable por nuestra UI, que seguro te será muy útil para ofrecer una mejor experiencia a tus usuarios. 👦🏻
Usar AbortController y AbortSignal resulta en un código más limpio y responsivo, a la vez que más seguro y efectivo. ❇️
No te olvides de compartir mi posts en tus redes sociales si te ha sido de utilidad. 🌱
También recuerda echarle un ojo a mi curso de React Router. Es gratis. 🥽
Abrazo. Bliss. 🤓
Enlaces relacionados

Fetch | Explicado
Checa este otro Post

