Async JS
Главное
Как это использовать в старых браузерах: https://babeljs.io/
Синхронный JS
function hello() { return "Hello" };
hello();Асинхронный JS
Async/Await
Async
// ex1
async function hello() { return "Hello" };
hello();
// ex2
let hello = async function() { return "Hello" }; // возвращает promise
hello();
// ex3 — то же, что и ex2, но через стрелочные функции
let hello = async () => { return "Hello" };
hello();
// ex1, ex2, ex3 делают одно и то же
// Чтобы получить значение, которое возвращает Promise,
// мы как обычно можем использовать метод .then():
hello().then((value) => console.log(value))
// или еще короче
hello().then(console.log)
Итак, ключевое слово async, превращает обычную функцию в асинхронную и результат вызова функции оборачивает в Promise. Также асинхронная функция позволяет использовать в своем теле ключевое слово await, о котором далее.
Await
Асинхронные функции становятся по настоящему мощными, когда вы используете ключевое слово await — по факту, await работает только в асинхронных функциях. Мы можем использовать await перед promise-based функцией, чтобы остановить поток выполнения и дождаться результата ее выполнения (результат Promise). В то же время, остальной код нашего приложения не блокируется и продолжает работать.
Вы можете использовать await перед любой функцией, что возвращает Promise, включая Browser API функции.
Небольшой пример:
Promises
Promise (промис, англ. "обещание") - это объект, представляющий результат успешного или неудачного завершения асинхронной операции. Так как большинство людей пользуются уже созданными промисами, это руководство начнем с объяснения использования вернувшихся промисов до объяснения принципов создания.
В сущности, промис - это возвращаемый объект, в который вы записываете два коллбэка вместо того, чтобы передать их функции.
Обработка ошибок Promise:
Примеры
Переписываем Promises с ипользованием async/await
Давайте посмотрим на пример из предыдущей статьи:
Давайте перепишем код используя async/await и оценим разницу.
Согласитесь, что код стал короче и понятнее — больше никаких блоков .then() по всему скрипту!
Так как ключевое слово async заставляет функцию вернуть Promise, мы можем использовать гибридный подход:
Await и Promise.all()
Фишка в вызове Promise.all — дожидаемся выполнения всего кода
Last updated