Corta las llamadas lentas con AbortController
Un servidor de modelos saturado puede tardar minutos. Pon un límite de tiempo y cancela la petición de verdad.
Escribe withTimeout(promiseFn, ms). Crea un AbortController, llama a promiseFn(signal) y devuelve su resultado. Si tarda más de ms, aborta la señal y rechaza con un Error cuyo name sea 'TimeoutError'. Los demás errores se propagan tal cual.
Ya tienes slowFetch(ms, { signal }), una petición falsa que responde 'done' tras ms milisegundos y respeta signal: si se aborta, se cancela y rechaza con un AbortError. Cuenta las cancelaciones en window.__aborted.
Retos 0/4
- Devuelve el resultado si llega a tiempo
- Rechaza con TimeoutError si tarda demasiado
- Cancela la petición lenta (aborta la señal)
- Deja pasar los demás errores
async function withTimeout(promiseFn, ms) {
// 1. crea const controller = new AbortController()
// 2. abórtalo pasados ms con setTimeout
// 3. convierte el aborto en un Error llamado 'TimeoutError'
return promiseFn();
}
withTimeout((signal) => slowFetch(300, { signal }), 30)
.then(console.log, (e) => console.log(e.name, e.message));Para profundizar: la referencia de MDN (en inglés) →
¿Esto en producción, con tus datos? Hablemos 15 minutos →