Если вы читаете это, вы, вероятно, понимаете, чем отличаются promise и async/await в контексте выполнения.

В JavaScript обещания и async/await — это два разных способа обработки асинхронных операций. Но они тесно связаны.

Обещание

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

Асинхронно/ожидание

Async/await — это синтаксический сахар поверх обещаний. Он обеспечивает более лаконичный способ написания асинхронного кода, упрощая его чтение и запись. С помощью Async/Await вы можете писать асинхронный код, похожий на синхронный код, и внутри него используются промисы.

В async/await ключевое слово async используется для объявления асинхронной функции. Ключевое слово await используется для ожидания разрешения промиса перед продолжением выполнения функции. Ключевое слово await можно использовать только внутри функции async.

Разница

Единственное различие заключается в контексте выполнения между promise и async/await.

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

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

Об авторе

Джесвант Редди — фронтенд-разработчик в Версии 1.