Вы увидите много кодов в JavaScript, где функция имеет несколько функций внутри функции или функций, которые требуют функций в качестве параметров, например:

Ну, это пример функций обратного вызова.

В JavaScript обратный вызов — это функция, которая передается другой функции в качестве аргумента для последующего выполнения.

Как вы можете видеть в предыдущем коде, функция PormptUser() вызывает методы .then() и .catch(), и эти методы вызывают другие функции, которые в зависимости от ответа пользователя (ответов) будут формироваться и выполняться.

Обратные вызовы гарантируют, что функция не будет запущена до завершения задачи, а будет запущена сразу после завершения задачи.

Вернемся к примеру: функция .then(function) не может выполняться одновременно с promptUser(), потому что это зависит от ответа.

Обратные вызовы помогают нам разрабатывать асинхронный код JavaScript и защищают нас от проблем и ошибок.

Мы можем определить два типа обратных вызовов: синхронные обратные вызовы и асинхронные обратные вызовы.

Синхронные обратные вызовы — это функции, которые выполняются после вызова, например:

Асинхронные обратные вызовы — это функции, которые указываются в качестве аргументов при вызове функции, которая запускает выполнение кода в фоновом режиме.

Когда фоновый код завершает работу, он вызывает функцию обратного вызова, чтобы сообщить вам, что работа выполнена, или чтобы вы знали, что произошло что-то интересное, например:

Когда мы передаем функцию обратного вызова в качестве аргумента другой функции, мы передаем только ссылку на функцию в качестве аргумента, и функция обратного вызова не выполняется немедленно.

Как вы можете заметить в примере, когда мы вызываем functionOne и functionTwo в качестве параметров, мы вызываем только имя без параметров, однако когда внутри функции addCallBacks ссылаемся на functionOne и functionTwo, мы передаем аргументы для выполнения конкретной операции.

«обратный вызов» (отсюда и название) асинхронно где-то внутри тела содержащей функции. Содержащая функция отвечает за выполнение функции обратного вызова, когда придет время.

Обратные вызовы позволяют вам контролировать порядок, в котором запускаются функции и какие данные передаются между ними, они также позволяют передавать данные в разные функции в зависимости от обстоятельств.

Обещания

Обещания — это новый стиль асинхронного кода.

Обещание используется для обработки асинхронного результата операции. JavaScript спроектирован так, чтобы не ждать полного выполнения асинхронного блока кода, прежде чем смогут выполняться другие синхронные части кода. Например, при отправке API-запросов к серверам мы не знаем, находятся ли эти серверы в автономном режиме или в сети, или сколько времени требуется для обработки запроса к серверу.

С промисами мы можем отложить выполнение блока кода до тех пор, пока не будет выполнен асинхронный запрос. Таким образом, другие операции могут выполняться без перерыва.

Заключение

Поначалу может быть пугающе работать с обратными вызовами, однако по мере того, как вы продвигаетесь в своих кодах, вы станете с ними более знакомыми.