Почему мы используем обратные вызовы, обещания или асинхронное ожидание? В чем разница между ними?

Javascript - это однопоточный язык, что означает, что движок JS может обрабатывать только одну вещь за раз и ждать ее завершения, прежде чем выполнять другую.

Если у нашего JS-приложения есть вызов API, затем функция SetTimeOut, а затем обычная функция, это замедлит время загрузки нашего приложения. Для вызова API или функции SetTimeOut может потребоваться больше времени, а обычная функция не может быть обработана до завершения выполнения предыдущих функций.

Вот где в игру вступает асинхронный JavaScript. Используя асинхронный JavaScript (такой как обратные вызовы, обещания и async / await), нашему JS-приложению не нужно ждать ответа от предыдущей функции (которая требует больше времени для обработки) перед выполнением другой функции.

✤ Обратные вызовы:

В Javascript функция обратного вызова - это функция, которая передается в качестве аргумента другой функции. Функция, которая принимает функцию / функции (функцию обратного вызова) в качестве аргумента / аргументов, называется функцией высшего порядка. Функции обратного вызова выполняются внутри функции высшего порядка.

Пример кода:

✤ Обещания:

Обещание - это объект, который представляет значение, которое, возможно, еще не доступно, но будет разрешено в какой-то момент в будущем. Это позволяет нам связывать обработчики с асинхронным действием, которое в конечном итоге вернет значение успеха или причину сбоя. На графике ниже показан процесс (фазы) обещаний.

Пример кода:

✤ Асинхронное ожидание:

Async-await - это способ написания функций, содержащих обещания / асинхронный код, который выглядит синхронным.

Функция async-await - это функция, которая содержит выражение await, которое приостанавливает выполнение функции async и ожидает выполнения переданного обещания. После того, как обещание разрешено, оно затем извлекает выполнение асинхронной функции и оценивает как разрешенное значение.

Пример кода:

★ Почему использование обещаний или асинхронного ожидания лучше, чем обратных вызовов? и почему использование Async-await лучше, чем обещания?

► Использование обратного вызова - это хорошо, но мы, разработчики, должны знать, как избежать ада обратного вызова (вложенные функции). Ад обратных вызовов - очень плохой случай, когда у вас есть много обратных вызовов внутри обратных вызовов. Ад обратного вызова может сделать код нечитаемым и не обслуживаемым. Ниже приведены несколько способов избежать ада обратных вызовов:

  • Модуляризация: разделите обратные вызовы на независимые функции.
  • Вы можете писать обратные вызовы, используя обещания. Обещания разбивают код и объединяют их в цепочку. Таким образом, вместо отступа кода вправо, как в обратных вызовах, ваши коды теперь увеличиваются в вертикальном направлении. Это решило главную проблему ада обратного вызова.
  • Вы можете писать обратные вызовы, используя новый async / await. Async await удаляет блоки .then вашего кода, заменяя их блоками try и catch, чтобы ваш код выглядел синхронным.

► Async / await равносильно неблокированию, как и обещания. Однако цель использования функций async-await состоит в том, чтобы упростить синхронное поведение обещаний и выполнить действия для группы обещаний. Ниже приведены некоторые преимущества использования Async / await по сравнению с обещаниями:

  • Более низкие требования к памяти.
  • Чистый и аккуратный синтаксис.
  • Более читабельный.
  • Обрабатывает условные выражения более плавно и чище, чем обещания.
  • Лучше обрабатывать ошибки и сообщать о них.

Спасибо за чтение! 😊