Ejercicio: Pruebas, registros y errores comunes
Objetivo
Escribir las cuatro piezas de fiabilidad que usa el bot en producción: decidir si un fallo se reintenta, calcular la espera entre intentos, interpretar un código de error de Meta y ocultar teléfonos en los logs.
Cómo se trabaja
La parte A es práctica real en tu terminal con el código de referencia. La parte B son cuatro funciones de JavaScript puro que se comprueban en esta página. No uses import ni process: solo funciones.
💡 Reto extra
Escribe reintentarConEsperas(estados): recibe una lista de estados HTTP simulados (por ejemplo [500, 503, 200]) y devuelve cuántos intentos hizo y cuánto esperó en total, aplicando esReintentable y esperaReintento con un máximo de 3 intentos.
Pasos
Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.
💡 Pista 1: Potencias de dos
El intento 1 espera baseMs, el 2 espera el doble, el 3 el cuádruple... Eso es baseMs * 2 ** (intento - 1). Con Math.min(valor, maxMs) pones el tope.
💡 Pista 2: Tabla de errores
Un objeto como { 131047: "plantilla", 131030: "corregir", ... } y tabla[codigo] ?? "revisar" resuelve el caso por defecto. Las claves numéricas de un objeto se convierten en texto, pero tabla[131047] funciona igual.
💡 Pista 3: Teléfonos
Convierte a texto con String(tel) y usa slice(0, 3) y slice(-3) para tomar el principio y el final.
🔎 Comprueba tu trabajo
Pega tu código y pulsa Comprobar. La revisión ocurre en tu navegador; nada se envía a ningún sitio. Cada punto en rojo incluye una pista. Pega solo el JavaScript, sin las etiquetas <script>.
✅ Ver una solución posible
Intenta resolverlo antes de mirar. Tu versión puede ser distinta y también correcta.
function esReintentable(estadoHttp) {
return estadoHttp === 429 || estadoHttp >= 500;
}
function esperaReintento(intento, baseMs = 500, maxMs = 8000) {
return Math.min(baseMs * 2 ** (intento - 1), maxMs);
}
const ACCIONES = {
131047: "plantilla",
131030: "corregir",
190: "corregir",
131008: "corregir",
131009: "corregir",
131056: "esperar",
131048: "esperar",
131026: "ignorar",
};
function accionParaError(codigo) {
return ACCIONES[codigo] ?? "revisar";
}
function ocultarTelefono(tel) {
const s = String(tel);
return s.length <= 6 ? "***" : s.slice(0, 3) + "***" + s.slice(-3);
}