Перейти к содержимому

JavaScript: Обработка ошибок с помощью промисов

Промисы в JavaScript являются фундаментальной частью управления асинхронными операциями, позволяя разработчикам обрабатывать асинхронные события с большей гибкостью и простотой (см. JavaScript: Промисы). Обработка ошибок в промисах имеет решающее значение для написания надежного кода на JavaScript, который может справляться с непредвиденными проблемами без падения приложения.

Обработка ошибок в промисах осуществляется с помощью метода .catch() или путем передачи второго аргумента в метод .then(). Оба метода предоставляют способы управления ошибками и восстановления после них, возникающих во время выполнения асинхронных операций.

Использование метода .catch()

Метод .catch() используется для перехвата любых ошибок, возникающих во время выполнения цепочки промисов.


Output appears here after Run.

Использование второго аргумента .then()

В качестве альтернативы в .then() можно передать второй аргумент для обработки ошибок, возникающих после выполнения колбэка первого аргумента.


Output appears here after Run.

Продвинутые техники обработки ошибок

Поток ошибок в цепочках

Ошибки должны корректно передаваться по цепочке промисов, чтобы гарантировать их обработку на соответствующем уровне. Например, если поместить блок .catch() перед блоком .then(), блок .then() все равно выполнится. Поскольку .catch() разрешает цепочку промисов (если только он не выбрасывает ошибку повторно), последующий .then() получает undefined в качестве аргумента.

WARNING

При размещении блока .catch() перед блоком .then() любая ошибка, выброшенная внутри .then(), не будет перехвачена предыдущим .catch(). Она будет обработана только в том случае, если вы добавите еще один блок .catch() после него.


Output appears here after Run.

Обработка конкретных ошибок

JavaScript позволяет применять более детализированные стратегии обработки ошибок, например, фильтрацию ошибок по их типу или конкретным обстоятельствам. В следующем примере мы обрабатываем TypeError. TypeError обычно возникает, когда значение не соответствует ожидаемому типу и, следовательно, требуемая операция не может быть выполнена.


Output appears here after Run.

Лучшие практики обработки ошибок в промисах

  1. Всегда возвращайте или выбрасывайте ошибки в блоках catch, чтобы гарантировать, что ошибки не будут проигнорированы молча.
  2. Правильно связывайте промисы, чтобы гарантировать перехват и обработку ошибок.
  3. Используйте блоки finally при необходимости для выполнения задач очистки, независимо от результата промиса.

Реализация блока Finally

Метод finally() используется для выполнения блока кода после завершения промисов, независимо от их результата.


Output appears here after Run.

Заключение

Эффективная обработка ошибок в промисах JavaScript необходима для создания надежных и устойчивых веб-приложений. Понимая и используя методы .catch(), второй аргумент .then() и finally(), разработчики могут гарантировать, что их приложения будут корректно обрабатывать асинхронные ошибки и поддерживать стабильную работу в различных условиях. Применение этих методов повысит функциональность и удобство использования ваших приложений на JavaScript. Примечание: при работе с async/await оборачивайте вызовы промисов в блоки try/catch для обработки ошибок, выглядящей синхронно.

Практика

Какой ключевой принцип обработки ошибок с помощью промисов в JavaScript необходимо понимать?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.