001 Асинхронные функции
Это специальный синтаксис для упрощения работы с промисами
Асинхронная функция вместо какого-либо значения всегда возвращает промис
Данная функция вернёт в результате промис, а в качестве аргумента resolve
будет передана возвращаемая строка
И так же мы можем к вызову функции применить then()
и catch()
для обработки результата функции и работы с ней
При появлении ошибки, мы будем видеть в статусе промиса rejected
Обработка ошибок промиса
002 Использование await
внутри асинхронных функций
Ключевое слово await
позволяет нам не ожидать выполнение промиса, а сразу приступать к выполнению остальных инструкции внутри асинхронной функции. Данное ключевое слово работает только в асинхронной функции
003 Пример с async await
Мы имеем, собственно, асинхронную функцию. Создали первую функцию, которая возвращает нам результат промиса. Вторая функция выполняет промис, который выполняется обязательно прежде чем продолжить выполнение кода дальше
004 Переход с промисов на async await
И вот пример функции getData()
, которая возвращает по итогу json формат данных. Переменные внутри функции заменяют then()
и читаются лучше. Если выпадет ошибка, то промис просто будет автоматически отклонён
И вот представлен пример сокращённого написания как самого промиса, так и быстрый вывод его результата (заменой then()
). Однако в этом случае мы можем словить непойманную ошибку, так как обработки ошибки - нет
Тут нужно напомнить, что
await
можно использовать только внутри асинхронных функций. Дело в том, что браузер может обработать такой код, а внешние интерпретаторы - нет
005 Обработка ошибок в асинхронных функциях
Чтобы отловить ошибку, нужно будет поместить код вывода результата в блок try/catch
006 Ключевые принципы в async await
Тут нужно поподробнее остановиться на последнем пункте. В асинхронных функциях будет ожидаться выполнение промиса, но промисы не блокируют выполнение остальных частей фронтэнд приложения (например, нажатие каких-либо кнопок). И только тогда, когда выполнение промиса будет закончено (resolve
/rejected
– и не pending
), функция продолжит своё выполнение