// ex1asyncfunctionhello() { return"Hello" };hello();// ex2lethello=asyncfunction() { return"Hello" }; // возвращает promisehello();// ex3 — то же, что и ex2, но через стрелочные функцииlethello=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 функции.
Promise (промис, англ. "обещание") - это объект, представляющий результат успешного или неудачного завершения асинхронной операции. Так как большинство людей пользуются уже созданными промисами, это руководство начнем с объяснения использования вернувшихся промисов до объяснения принципов создания.
В сущности, промис - это возвращаемый объект, в который вы записываете два коллбэка вместо того, чтобы передать их функции.
functiondoSomething() {returnnewPromise((resolve, reject) => {console.log("Готово.");// Успех в половине случаев.if (Math.random() >.5) {resolve("Успех") } else {reject("Ошибка") } })}doSomething().then(successCallback, failureCallback);