JavaScript async await — асинхронний код без колбеків


Синтаксис async/await дозволяє писати асинхронний код так, ніби він послідовний: await чекає на проміс, не блокуючи сторінку.

автор: NagarD

Загальний опис

Це найбільше полегшення в історії асинхронного JavaScript. Ланцюжок із трьох .then() перетворюється на три звичайні рядки, які читаються згори вниз.

Функція, позначена async, завжди повертає проміс — навіть якщо в ній написано return 5. А await усередині неї призупиняє виконання тільки цієї функції, не заморожуючи браузер.

І головне: помилки ловляться звичайним try...catch, а не окремим .catch() — тобто так само, як у синхронному коді.

автор: NagarD

Порада

Якщо кілька запитів не залежать один від одного — не чекай їх по черзі. await Promise.all([...]) виконає їх паралельно й заощадить час.

автор: NagarD
Нотатка

await працює лише всередині async-функції (або на верхньому рівні модуля). У звичайній функції це синтаксична помилка.

автор: NagarD

Синтаксис

async function fn() {
    const result = await promise;
}

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
async...await 55+ 52+ 11+ 42+ 15+ -
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
async...await 55+ yes yes 11+

Приклади

+ запропонувати свій приклад у пісочниці

Запит із обробкою помилок і паралельне завантаження.

async function loadUser(id) {
    try {
        const response = await fetch(`/api/users/${id}`);

        if (!response.ok) {
            throw new Error(`Помилка ${response.status}`);
        }

        return await response.json();
    } catch (error) {
        console.error('Не вдалося завантажити:', error.message);
        return null;
    }
}

// паралельно, а не по черзі — удвічі швидше
async function loadBoth() {
    const [user, posts] = await Promise.all([
        loadUser(1),
        fetch('/api/posts').then(r => r.json()),
    ]);

    console.log(user, posts);
}
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід