Обратные вызовы в JavaScript:-
Мы не можем знать, когда пользователь нажмет кнопку, поэтому мы определяем обработчик события нажатия. Этот обработчик события принимает функцию, которая будет вызываться при срабатывании события:
Это так называемый обратный вызов.
Обратный вызов — это простая функция, которая передается как значение другой функции и будет выполняться только тогда, когда произойдет событие. Мы можем сделать это, потому что в JavaScript есть первоклассные функции, которые можно назначать переменным и передавать другим функциям (так называемые функции более высокого порядка).
Обработка ошибок в обратных вызовах
Ошибки можно обрабатывать в функциях обратного вызова с помощью оператора try-catch или путем передачи объекта ошибки в качестве первого аргумента функции обратного вызова.
Вот пример использования try-catch:
Проблема с обратными вызовами
Однако каждый обратный вызов добавляет уровень вложенности, и когда у вас много обратных вызовов, код очень быстро начинает усложняться:
Это всего лишь простой 4-уровневый код, но вы видели гораздо больше уровней вложенных функций обратного вызова.
Обратные вызовы могут привести к нескольким проблемам, в том числе: -
- Ад обратных вызовов. Когда используется несколько вложенных обратных вызовов, становится трудно читать и поддерживать код, что приводит к явлению, известному как «ад обратных вызовов».
- Потерянный контекст. Контекст (значение
this
) может быть потерян при использовании обратных вызовов, что затрудняет доступ к данным и функциям из родительской области. - Обработка ошибок. Обратные вызовы не предоставляют стандартного способа обработки ошибок, что затрудняет организованное и централизованное управление ошибками.
- Неудобочитаемость. Обратные вызовы могут быть трудными для понимания, особенно когда они сильно вложены друг в друга, что делает код менее читаемым.
- Невозможность использования функций языка. Обратные вызовы несовместимы с некоторыми управляющими структурами языка, такими как операторы try-catch и return.
Чтобы решить эти проблемы, разработчики JavaScript часто используют Promises и Async/Await, которые обеспечивают более организованный и удобный способ обработки асинхронного кода.