Las claves verificadas
- AbortController entrega una señal: al abortar, la llamada fetch pendiente se rechaza con el motivo y también puede interrumpirse la lectura de un cuerpo de respuesta. Ver evidencia
- Si abort() se llama sin una razón, AbortSignal guarda una excepción AbortError; con abort(reason), conserva el motivo indicado. Ver evidencia
- AbortSignal.timeout() activa la señal tras un período de tiempo activo y el rechazo de fetch por timeout usa TimeoutError. Ver evidencia
- AbortSignal.any() combina señales y se activa por la primera que se cancele, cuyo motivo permite reconocer si fue un botón o un timeout. Ver evidencia
- La documentación oficial vigente de Node.js 24 enumera AbortSignal.timeout() y AbortSignal.any() entre las señales disponibles en el entorno. Ver evidencia
Qué cancela AbortController en una solicitud fetch
AbortController permite enviar una señal de cancelación a operaciones que la admiten, como fetch. Se crea un controlador, se pasa su propiedad signal en las opciones de la solicitud y se llama a abort() cuando esa operación deja de ser necesaria. La promesa pendiente se rechaza con el motivo de cancelación.
También puede servirte: Web Workers en JavaScript: qué son y cuándo convienen
La interrupción también importa después de recibir los encabezados: si el cuerpo de la respuesta sigue leyéndose, abortar puede interrumpir esa lectura. Por eso, el try/catch debe abarcar tanto fetch(url, { signal }) como el await de response.json() o response.text(); cubrir sólo el primer await deja un tramo sin manejar.
Cómo cancelar cuando el usuario cambia de pantalla
Cada solicitud debe tener su propio controlador. Si alguien escribe una nueva búsqueda, cambia de ficha o abandona una vista, la aplicación puede abortar el pedido anterior para que una respuesta que ya perdió vigencia no siga consumiendo trabajo en el cliente. Una señal usada y abortada no se reinicia: para la siguiente operación hay que crear otro AbortController.
El botón de cancelar llama al mismo método: controller.abort(). En el catch, revisá si controller.signal.aborted o el nombre del motivo antes de mostrar un error genérico. Así la interfaz puede tratar una cancelación esperada como tal, mientras reserva el mensaje de falla para otros problemas. Si se proporciona una razón propia a abort(reason), el código puede conservarla para explicar qué acción canceló la tarea.

Cómo fijar un límite de tiempo y combinar señales
AbortSignal.timeout(5000) crea una señal que se activa al superar cinco segundos y usa un motivo TimeoutError. La duración se calcula como tiempo activo; puede pausarse, por ejemplo, si el documento queda en la caché de atrás/adelante. No es idéntico a medir cinco segundos de reloj en cualquier circunstancia.
Cuando sirven tanto un botón como un plazo, AbortSignal.any([controller.signal, AbortSignal.timeout(5000)]) produce una señal que se activa si se activa cualquiera de las dos originales. El motivo indica cuál llegó primero, lo que permite distinguir AbortError de TimeoutError. Si se necesita liberar un temporizador de inmediato al terminar antes del plazo, MDN recomienda un controlador con setTimeout y clearTimeout: timeout() no ofrece una operación para cancelar su temporizador.
Guía de decisión: cancelar por botón, navegación o demora
Si una operación pertenece a una pantalla que puede cerrarse, vinculá su controlador al ciclo de vida de esa pantalla. Si la persona puede detenerla, conservá el controlador para su botón. Si el servicio tarda demasiado, fijá un límite adecuado al trabajo: una consulta rápida y una descarga grande no tienen por qué compartir el mismo plazo. Para cubrir dos causas, combiná las señales y conserva el motivo del rechazo.
Este mapa describe lo que fetch hace con su respuesta; no garantiza revertir acciones fuera del cliente. Node.js 24 también documenta AbortSignal.timeout() y AbortSignal.any().

Qué aporta VisteEsto: Nuestro trabajo en esta nota
VisteEsto organiza las instrucciones del estándar en un recorrido de implementación: cancelación por navegación o botón, timeout, combinación de señales y manejo del motivo sin confundir errores.
Fuentes, actualizaciones y metodología 5 fuentes
Fuentes consultadas
- Fuente primariaWHATWG Fetch Standard: abortar una llamada fetch
- Fuente primariaWHATWG DOM Standard: AbortController y AbortSignal
- Fuente secundariaMDN: AbortSignal
- Fuente secundariaMDN: AbortSignal.timeout()
- Fuente primariaNode.js v24: globals AbortController y AbortSignal
Historial de actualización
- Borrador elaborado a partir de los estándares Fetch y DOM, y de la documentación de MDN sobre AbortSignal y sus métodos timeout y any.
Cómo elaboramos esta nota
Definimos la consulta principal “cómo cancelar un fetch con AbortController en JavaScript”, contrastamos los datos con 5 fuentes —3 primarias— y revisamos contexto, imágenes y posibles vacíos antes de publicar. Conocé nuestra política editorial y de verificación.



