Почему обработка ошибок? Во время выполнения кода мы можем столкнуться с множеством ошибок, включая ошибку javascript, системную ошибку или ошибку, возвращенную API. Как только возникает ошибка, и мы не обработали ее должным образом, выполнение кода будет прекращено. В некоторых сценариях мы не хотим, чтобы наш код завершался, мы должны использовать обработку ошибок, чтобы поймать ошибку и убедиться, что мы продолжаем выполнение нашего кода.
без обработки ошибок код завершается на первой строке
с обработкой ошибок код будет выполняться до конца скрипта
В предыдущей статье я объяснил разницу между callback, promise, async/await (https://toddypet.medium.com/javascript-asynchronous-programming-77f8899cd143). Эта статья создана для обработки более сложного сценария асинхронной обработки ошибок.
Набросок этой статьи:
- Базовая обработка ошибок
- Обещание обработки ошибок
- Асинхронная/ожидающая обработка ошибок
Основная обработка ошибок
Для базовой обработки ошибок, если начать с оператора 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 после асинхронной функции для обработки ошибок.