Почему обработка ошибок? Во время выполнения кода мы можем столкнуться с множеством ошибок, включая ошибку javascript, системную ошибку или ошибку, возвращенную API. Как только возникает ошибка, и мы не обработали ее должным образом, выполнение кода будет прекращено. В некоторых сценариях мы не хотим, чтобы наш код завершался, мы должны использовать обработку ошибок, чтобы поймать ошибку и убедиться, что мы продолжаем выполнение нашего кода.

без обработки ошибок код завершается на первой строке

с обработкой ошибок код будет выполняться до конца скрипта

В предыдущей статье я объяснил разницу между callback, promise, async/await (https://toddypet.medium.com/javascript-asynchronous-programming-77f8899cd143). Эта статья создана для обработки более сложного сценария асинхронной обработки ошибок.

Набросок этой статьи:

  1. Базовая обработка ошибок
  2. Обещание обработки ошибок
  3. Асинхронная/ожидающая обработка ошибок

Основная обработка ошибок

Для базовой обработки ошибок, если начать с оператора try-catch:

Попробовать: позволяет вам определить код, который вы хотите выполнить. Если в какой-либо строке выполнения этого блока есть ошибки, она будет обработана в catch

Catch: позволяет определить блок кода, который будет выполняться в случае возникновения ошибки в блоке try.

try {
} catch(error){
}

Throw: вы также можете лучше контролировать поток программы, вручную выбрасывая ошибки в блоке try. Вы можете бросить строку, число, логическое значение или объект

Наконец: оператор finally является необязательным, если он будет выполнять код после попытки и перехвата независимо от результата.

он запускается, когда нет ошибок в блоке try

он также запускается, если в блоке catch обнаружена какая-либо ошибка.

Обработка ошибок обещаний

Теперь давайте посмотрим, как работает обработка ошибок в обещаниях.

Цепочка промисов элегантно обрабатывает ошибки. Пока на каком-либо шаге в цепочке возникают ошибки, он перейдет к блоку catch, чтобы обработать его.

Когда оба taskOne, taskTwo проходят:

Когда задача taskOne терпит неудачу, она пропускает цепочку задач TaskTwo и перепрыгивает, чтобы поймать:

Когда taskTwo терпит неудачу, он перепрыгивает, чтобы поймать:

Вы также можете проанализировать и повторно выдать ошибку в следующем блоке catch.

Асинхронная/ожидающая обработка ошибок

мы часто используем блок try..catch для обработки ошибок для async/await.

После сбоя Task 1 он переходит к блоку catch и не запускает taskTwo.

После запуска taskOne, когда taskTwo терпит неудачу, она перепрыгивает, чтобы поймать ошибку.

Если у вас нет блока try catch в асинхронной функции. Поскольку асинхронная функция сама по себе также возвращает обещание, вы можете использовать .catch после асинхронной функции для обработки ошибок.