Capítulo 10: Patrones Avanzados
10.1. AbortController: Cancelar peticiones
// AbortController permite cancelar peticiones
const controller = new AbortController();
// Pasar la señal a fetch
fetch("/api/datos", {
signal: controller.signal
});
// Cancelar después de 5 segundos
setTimeout(() => controller.abort(), 5000);Caso de uso: Búsqueda en vivo
let controladorBusqueda = null;
document.querySelector("#buscar").addEventListener("input", async (e) => {
// Cancelar búsqueda anterior si existe
if (controladorBusqueda) {
controladorBusqueda.abort();
}
// Crear nuevo controlador
controladorBusqueda = new AbortController();
const termino = e.target.value.trim();
if (!termino) {
document.querySelector("#resultados").innerHTML = "";
return;
}
try {
const respuesta = await fetch(
`/api/buscar?q=${termino}`,
{ signal: controladorBusqueda.signal }
);
const resultados = await respuesta.json();
// Mostrar resultados solo si no fue cancelado
document.querySelector("#resultados").innerHTML = resultados
.map(r => `<div>${r.nombre}</div>`)
.join("");
} catch (error) {
// AbortError significa que fue cancelado (no es un error real)
if (error.name === "AbortError") {
console.log("Búsqueda cancelada");
} else {
console.error("Error:", error);
}
}
});Timeout con AbortController:
10.2. Reintentos y backoff exponencial
Backoff exponencial con jitter:
10.3. Peticiones en paralelo: Promise.all con fetch
Promise.all con fetchPromise.allSettled para operaciones parciales:
Promise.allSettled para operaciones parciales:10.4. Debouncing y throttling en búsquedas
Debouncing (esperar a que deje de escribir):
Throttling (máximo una petición cada X ms):
10.5. Caché simple: Evitar peticiones repetidas
Resumen del Capítulo
💡 Conceptos Clave:
🤔 Preguntas de Reflexión:
Última actualización
¿Te fue útil?