Построй явную стратегию ошибок с выделенными классами, грамотно расставленными границами catch и консолью, используемой на полную.
Открыть этот урок в KodokonНадёжность - это не поймать каждую ошибку, а поймать её в правильном месте. Правило из практики: падай быстро и громко как можно ближе к багу (валидация, инварианты), и лови только на границах, где ты действительно можешь среагировать: показать сообщение, повторить попытку, записать в лог. try/catch, который не делает ничего полезного, не делает код безопаснее; он делает сбои беззвучными.
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");
}
}Простые строки - это ещё не стратегия ошибок. Наследуйся от Error, чтобы создавать классы, несущие структурированные данные (HTTP-статус, невалидное поле), которые можно различать через instanceof. Начиная с ES2022 опция cause сцепляет исходную ошибку с высокоуровневой: ты показываешь понятное бизнес-сообщение, не теряя технический след.
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);
}
}Консоль предлагает куда больше, чем log: console.table выстраивает коллекции объектов, group/groupEnd вкладывает вывод, time/timeEnd измеряет длительность, console.assert пишет только тогда, когда условие ложно, а console.trace печатает текущий стек вызовов. Вместе эти инструменты уверенно бьют ливень безымянных 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 при создании ошибки?console.assert(condition, message)?