Хорошо иметь logi c в вашем блоке catch
, если есть logi c для обработки или сообщения об ошибке. Вот для чего нужны блоки catch
.
что произойдет, если код внутри catch выдает какую-то ошибку?
Это ошибка new . Если вы не поймаете его, он будет передан вызывающему абоненту, например, c.
Пример:
function example() {
try {
// "x" has no method `foo` so this causes an error:
"x".foo();
} catch (e) {
console.log(`Caught error in \`example\`: ${e.message}`);
// "y" has no method `bar` so this causes an error:
"y".bar();
}
}
function wrapper() {
try {
example();
} catch (e) {
console.log(`Caught error in \`wrapper\`: ${e.message}`);
}
}
wrapper();
Ошибки выбрасывания намеренно из блока catch
- распространенная практика во многих местах. Вы можете свернуть оригинал в тот, который лучше обрабатывать выше или, возможно, выбросить более значимую ошибку
class MyError extends Error {
constructor(errorCode) {
super();
this.errorCode = errorCode;
}
}
function example() {
try {
// "x" has no method `foo` so this causes an error:
"x".foo();
} catch (e) {
throw new MyError(42);
}
}
function wrapper() {
try {
example();
} catch (e) {
if (e.errorCode === 42) {//specific
console.log(`I know what this error means: the flux capacitor is broken`);
} else {//generic
console.log(`Caught error in \`wrapper\`: ${e.message}`);
}
}
}
wrapper();