Skip to main content

Коли виконується блок catch?

Коротка відповідь

Блок catch виконується лише тоді, коли в блоці try виникла помилка (виняток) - або кинута вручну (throw), або автоматично (наприклад, ReferenceError, TypeError і т. д.).

Якщо код усередині try виконався без помилок - catch пропускається.


Покроковий механізм роботи

  1. Код усередині try { ... } починає виконуватися порядково.
  2. Якщо в ньому не виникає помилок, catch не викликається.
  3. Якщо всередині try сталася помилка, виконання try негайно переривається, і керування переходить у catch.
  4. У catch(error) доступний об'єкт помилки, який можна обробити або вивести.

Приклад 1. Помилки немає -> catch не спрацьовує

javascript
try { console.log("Все працює чудово!"); } catch (error) { console.log("Спіймали помилку:", error.message); } console.log("Продовжуємо виконання...");

Вивід:

javascript
Все працює чудово! Продовжуємо виконання...

Оскільки всередині try не було помилок - catch не виконується.


Приклад 2. Помилка є -> catch виконується

javascript
try { console.log("Початок"); throw new Error("Сталася помилка!"); console.log("Цей код не виконається"); } catch (error) { console.log("Спіймали:", error.message); }

Вивід:

javascript
Початок Спіймали: Сталася помилка!

Після throw виконання try припиняється, і керування передається в catch.


Приклад 3. Автоматична помилка

javascript
try { console.log(a); // ReferenceError: a is not defined } catch (error) { console.log("Спіймали:", error.name); // ReferenceError }

Тут catch спрацьовує, тому що JS автоматично кинув виняток при зверненні до неіснуючої змінної.


Приклад 4. Кілька рядків - помилка "обриває" try

javascript
try { console.log("1"); JSON.parse("not valid JSON"); // помилка тут console.log("2"); // не виконається } catch (error) { console.log("Спіймали:", error.message); } console.log("3");

Вивід:

javascript
1 Спіймали: Unexpected token n in JSON at position 0 3

Щойно сталася помилка, try переривається, і виконується catch.


Приклад 5. Помилка поза try - catch не спрацьовує

javascript
try { console.log("Все добре всередині try"); } catch (error) { console.log("Спіймали помилку:", error.message); } throw new Error("Помилка поза try!"); // не перехопиться

Помилка не буде спіймана, тому що сталася поза блоком try.


Приклад 6. Помилка всередині асинхронного коду

Важливо: try...catch не ловить помилки всередині колбеків і промісів, якщо не використовувати await або catch().

javascript
try { setTimeout(() => { throw new Error("Помилка в колбеку"); // не спіймається }, 1000); } catch (e) { console.log("Спіймано:", e.message); }

Щоб ловити помилки з промісів - потрібно використовувати async/await або .catch():

Правильно:

javascript
async function run() { try { await Promise.reject(new Error("Помилка в промісі")); } catch (e) { console.log("Спіймали:", e.message); } } run();

Приклад 7. Якщо помилок кілька - ловиться перша

javascript
try { throw new Error("Помилка 1"); throw new Error("Помилка 2"); // не виконається } catch (err) { console.log("Спіймана:", err.message); }

Вивід:

javascript
Спіймана: Помилка 1

Підсумок

СитуаціяЧи виконується catch?Причина
У try немає помилокНіКод відпрацював нормально
У try кинуто throwТакВиняток оброблено
JS сам кинув помилку (ReferenceError тощо)ТакАвтоматична помилка
Помилка поза tryНіНе входить у область обробки
Помилка в колбеку/Promise без awaitНіАсинхронний код поза try

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.