Вебсправочник
Справочник JavaScript

async и await: последовательное чтение асинхронного кода

async-функция возвращает Promise, а await приостанавливает её продолжение до получения результата ожидаемого значения.

Назначение

async-функция возвращает Promise, а await приостанавливает её продолжение до получения результата ожидаемого значения.

Как это работает

Ожидание не блокирует весь поток так, как длительный синхронный цикл. Ошибку отклонённого обещания можно обработать обычным try/catch вокруг await. Независимые операции не обязательно запускать последовательно.

Пример

async function doubleLater(value){const number=await Promise.resolve(value);return number*2;}
const pending=doubleLater(4);
console.assert(pending instanceof Promise);
pending.then(result=>console.assert(result===8));

Что должно получиться

Немедленно возвращается Promise, а его результатом становится 8. В примере нет сетевого запроса или таймера: он выделяет именно поведение обещания и await.

Граница применения и частая ошибка

Не ставьте await в цикл по привычке, если запросы независимы и допустим ограниченный параллелизм. Но и не запускайте тысячи операций сразу без ограничения ресурсов.

Самостоятельная проверка

Сравните результат вызова async-функции и значение после await. Затем отклоните внутреннее обещание и проверьте, где должен находиться обработчик ошибки.

JavaScript в песочнице этого сайта не выполняется. Перенесите пример в отдельный учебный файл. Сначала проверьте исходный результат, затем измените входные данные; ошибка проверки означает, что результат отличается от ожидаемого.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.