Comments 10
Вот бы ещё рассказали, что полезного содержится в том объекте, который передаётся в блок catch…
0
Про try/catch считаю обязательным упомянуть, что в catch не попадут брошенные исключения из асинхронных функций внутри блока try.
0
Попадут
async function test() {
await test1()
}
async function test1() {
await test2()
}
async function test2() {
throw Error("hi, i'm error from async function")
}
async function go() {
try {
await test()
}
catch (e) {
console.log(e)
}
}
go()
// Error: "hi, i'm error from async function"
+1
У вас код в синхронном стиле потому что, вы везде ожидаете результат посредством await.
Приведу свой простой пример.
Аналогично исключение не будет перехватываться и в запросах к серверу, а так же если мы будем вешать обработчики на события от мыши и клавиатуры.
Приведу свой простой пример.
try {
setTimeout(() => {
throw new Error('sdfsdfdf');
}, 10);
} catch (e) {
console.log(777, e);
}
Аналогично исключение не будет перехватываться и в запросах к серверу, а так же если мы будем вешать обработчики на события от мыши и клавиатуры.
0
Как и везде не указанно зачем нужен блок finally.
Возьмём пример:
Тут finally бесполезен — его можно просто убрать.
А вот в этом примере он использован вполне оправданно:
Если при присваивании выпрыгнет исключение — мы всёравно отправим данные на сервер. А исключение обработаем потом.
Возьмём пример:
function foo(a, b) {
let result;
try {
result = a.concat(b);
} catch(e) {
if(!a) {
a = '';
}
if(!b) {
b = '';
}
result = `${a}`.concat(b);
} finally {
return result;
}
}
Тут finally бесполезен — его можно просто убрать.
А вот в этом примере он использован вполне оправданно:
function foo(data, source) {
try {
data.a = source.a.b.c.d;
data.b = source.x.y.z;
// data.c = ....
} catch(e) {
console.error(`Data is incoplete`);
throw e;
} finally {
sendToServer(data);
}
}
Если при присваивании выпрыгнет исключение — мы всёравно отправим данные на сервер. А исключение обработаем потом.
+1
хотя здесь тоже можно sendToServer поместить в блоке catch до выброса ошибки
где-то в просторах java читал, что finally удобно, когда, скажем, нужно открыть коннект к БД, запросить данные и независимо от результата, закрыть коннект к БД
в этом случае в блоке catch будет стандартная логика обработки ошибки, а в блоке finally только закрытие коннекта
где-то в просторах java читал, что finally удобно, когда, скажем, нужно открыть коннект к БД, запросить данные и независимо от результата, закрыть коннект к БД
в этом случае в блоке catch будет стандартная логика обработки ошибки, а в блоке finally только закрытие коннекта
0
Да — чаще всего файнали используеться для очистки рессурсов. Но нет смысла ставить файнали — если в кэтч не выбрасываеться исключение.
Нет — если перенести sendToServer в кэтч блок — то данные будут отправляться только если возникло исключение — что не совсем так как я задумывал в данном примере :)
Нет — если перенести sendToServer в кэтч блок — то данные будут отправляться только если возникло исключение — что не совсем так как я задумывал в данном примере :)
+1
Объяснит, пожалуйста, вот это кусок
const es = helper`ES ${esth} is `
Вроде как тут скобки должны быть с аргументами, а на самом деле что?-1
Sign up to leave a comment.
Руководство по JavaScript, часть 6: исключения, точка с запятой, шаблонные литералы