Solución al problema de la semana pasada, y de paso una función que reintenta las peticiones que fallan y corta las que tardan demasiado.
export async function pedir(url, { intentos = 3, espera = 5000 } = {}) {
for (let i = 1; i <= intentos; i++) {
const control = new AbortController();
const reloj = setTimeout(() => control.abort(), espera);
try {
const r = await fetch(url, { signal: control.signal, cache: 'no-store' });
if (r.ok) return await r.json();
} catch (error) {
if (i === intentos) throw error;
} finally {
clearTimeout(reloj);
}
await new Promise((listo) => setTimeout(listo, 500 * i));
}
throw new Error('Sin respuesta tras ' + intentos + ' intentos');
}
La clave era cache: no-store. El servidor de pruebas devolvía max-age=600.

