Каталог
Веб-разработка с нуля: четыре курса по порядку.
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Каталог
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Урок 97 из 114 · 10 мин
Error, message, name, cause, toString, Error.isError и все встроенные виды: RangeError, URIError, EvalError, AggregateError, свои классы ошибок.
Программа пишет просто «Ошибка». А мне надо понимать: товар кончился или сеть пропала?
Ошибка — это объект. У неё есть имя, текст, причина. И можно делать свои виды ошибок.
Error · message · namenew Error("текст") — message хранит текст, name — вид ("Error"). Обычно ещё есть stack — где случилась.const e = new Error("Файл не найден");
console.log(e.name, e.message, e instanceof Error);cause · toString()new Error("…", { cause: err }) — связать ошибку с исходной. toString() → "Имя: текст".try {
try { JSON.parse("{"); } catch (err) { throw new Error("Меню не загрузилось", { cause: err }); }
} catch (e) {
console.log(e.toString(), "←", e.cause.name);
}Error.isError()instanceof ломается).console.log(Error.isError(new TypeError("x")), Error.isError({ message: "подделка" }));RangeError · URIError · EvalErrorRangeError — значение вне допустимого диапазона (new Array(-1)), URIError — испорченный адрес (decodeURI("%")), EvalError — исторический, сейчас не бросается.try { new Array(-1); } catch (e) { console.log(e.name); }
try { decodeURI("%"); } catch (e) { console.log(e.name); }
console.log(new EvalError("x").name);AggregateErrornew AggregateError([e1, e2], "текст") — массив ошибок в errors. Её бросает Promise.any, когда все промисы упали.const e = new AggregateError([new Error("нет сети"), new Error("нет места на диске")], "Не сохранить");
console.log(e.message, e.errors.map((x) => x.message));class OutOfStock extends Error — свой вид ошибки со своим name и полями. Ловить по instanceof.class OutOfStock extends Error {
constructor(item) {
super(`Нет на складе: ${item}`);
this.name = "OutOfStock";
this.item = item;
}
}
try { throw new OutOfStock("наушники"); } catch (e) { console.log(e instanceof OutOfStock, e.name, e.item); }Перебрасываешь ошибку — передай исходную в cause, иначе причина потеряется.
Сделай класс OutOfStock extends Error с name = "OutOfStock" и полем item, и функцию brew(stock, item): если stock[item] нет или 0 — бросает OutOfStock, иначе уменьшает остаток.
Выберите один ответ.
Зачем new Error("…", { cause })?
Выберите один ответ.
Что бросит (1).toFixed(200)?
Проверяем состояние обучения…