Как отобразить что-то, если Catch не запускается? - PullRequest
0 голосов
/ 17 января 2019

Мне интересно, как "сделать что-то", только если это проходит, например, как catch запускается только при наличии ошибки. Как и в моем примере, console.log("FOO") не приведет к ошибке, поэтому перехват не запустится, но как я могу запустить что-то только , если оно не перехвачено?

 try { 
  console.log("FOO")
 }
 catch(err) {
   message.innerHTML = "Input is WRONG";
 }
 message.innerHTML = "Input Works!" // <--- this will always get hit regardless of error or not

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Чтобы запустить ваш catch, блок try должен завершиться сбоем - как в случае с отсутствующей переменной.

const messageA = document.querySelector('#message-a');
const messageB = document.querySelector('#message-b');

const a = 10;
const b = 10;  
// const c = 10;
 

//  Test 1 (works)
try {
  let sum = a + b;
  messageA.innerHTML = "We're Happy!"
} catch (err) {
  messageA.innerHTML = "Houston we have a problem!";
}

//  Test 2 (fails because c is not defined)
try {
  let sum = a + c;
  messageB.innerHTML = "We're Happy!"
} catch (err) {
  messageB.innerHTML = "Houston we have a problem!";
}
<p>Test 1: <span id="message-a"></span></p>
<p>Test 2: <span id="message-b"></span></p>

Разница между if / else и try / catch

Если / else является условным оператором , который оценивает условие например. х == 42
и затем запустите блок true или false в зависимости от результата.

if (condition) { 
    /* condition is true do... */
}
else { 
    /* condition is false do... */ 
}

Try / catch - это оператор исключения , который всегда будет запускать блок try и только передать управление блоку перехвата, если что-то вызывает ошибку (как правило, фатальная ошибка, которая в противном случае сломает программу).

try {
    /* do this... and if it fails transfer control to catch */
} 
catch(err) {
    /* something caused an error now do this... */
}

Думайте об этом как о методе обработки ошибок - например, если вы делаете запрос к API и по какой-то причине сервер не отвечает, вы не авторизованы или ...

Подробнее: Поток управления и обработка ошибок в MDN

0 голосов
/ 17 января 2019

Я думаю, вам может понадобиться что-то вроде этого:

var success = true;
try { 
    console.log("FOO");
}
catch(err) {
    success = false;
}
if (success)
    message.innerHTML = "Input Works!";
else
    message.innerHTML = "Input is WRONG";
...