Fiabilidad · Media · 15 min

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));
La consola aparece aquí (console.log).

Para profundizar: la referencia de MDN (en inglés) →

¿Esto en producción, con tus datos? Hablemos 15 minutos →