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

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

А теперь, с добавлением Async / Await, написание кода JavaScript стало еще лучше.

Что такое Async-Await

Одна из лучших вещей, появившихся в Node.js, - это функция async-await. Async await заставляет асинхронный код javascript выглядеть синхронным. Когда вызывается асинхронная функция, она возвращает обещание. Когда асинхронная функция возвращает значение, обещание будет разрешено с возвращенным значением. Когда асинхронная функция генерирует исключение или какое-либо значение, Promise будет отклонен с брошенным значением.

Async - объявляет асинхронную функцию

Функция Async может содержать одну или несколько операций, таких как, например, запрос определенных данных из базы данных или отправка любых данных запроса в базу данных. Для выполнения всех этих операций может потребоваться разное время. Поскольку javascript имеет асинхронный характер, он не будет ждать завершения первой операции, он может перейти ко второй операции и так далее. Чтобы функция работала синхронно, нам нужно выполнить операцию await.

Await - приостанавливает выполнение асинхронных функций

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

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

В приведенном выше примере мы выбираем пользователя, как только у вас есть объект User, объявляем его как постоянный User, затем мы выбираем член с пользователем, если он там, он получит роль, добавит роль к члену , и отправьте сообщение на канал.

Если какое-либо из обещаний не выполняется, код перестанет выполнять остальные операции внутри блока try и запустит блок внутри catch с объектом Error и отправит сообщение об ошибке на консоль.