Construye una estrategia de errores explícita con clases dedicadas, límites de captura bien colocados y una consola aprovechada al máximo.
Abrir esta lección en KodokonLa robustez no consiste en capturar todos los errores, sino en capturarlos en el lugar adecuado. Regla de campo: falla rápido y ruidosamente lo más cerca posible del bug (validación, invariantes), y captura solo en los límites donde realmente puedes reaccionar: mostrar un mensaje, reintentar, registrar. Un try/catch que no hace nada útil no vuelve el código más seguro; vuelve los fallos silenciosos.
function parseConfig(json) {
try {
return JSON.parse(json);
} catch (error) {
console.error("Unreadable config:", error.message);
throw error; // rethrow: nothing can be fixed here
} finally {
console.log("Finished reading configuration");
}
}Las simples cadenas de texto no constituyen una estrategia de errores. Extiende Error para crear clases que lleven datos estructurados (estado HTTP, campo inválido) que puedan discriminarse con instanceof. Desde ES2022, la opción cause encadena el error original al de alto nivel: expones un mensaje de negocio claro sin perder el rastro técnico.
class ApiError extends Error {
constructor(message, status, options) {
super(message, options);
this.name = "ApiError";
this.status = status;
}
}
try {
const low = new Error("socket timeout");
throw new ApiError("Profile unavailable", 503,
{ cause: low });
} catch (error) {
if (error instanceof ApiError) {
console.error(error.status, error.cause.message);
}
}La consola ofrece mucho más que log: console.table alinea colecciones de objetos, group/groupEnd anida la salida, time/timeEnd mide una duración, console.assert solo registra cuando la condición es falsa y console.trace imprime la pila de llamadas actual. Combinadas, estas herramientas superan con creces a un chaparrón de llamadas anónimas a log.
const users = [
{ name: "Ada", role: "admin" },
{ name: "Linus", role: "dev" },
];
console.table(users);
console.group("Checks");
console.assert(users.length > 0, "Empty list");
console.time("sort");
users.sort((a, b) => a.name.localeCompare(b.name));
console.timeEnd("sort");
console.groupEnd();finally?cause al construir un error?console.assert(condition, message)?