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 в песочнице этого сайта не выполняется. Перенесите пример в отдельный учебный файл. Сначала проверьте исходный результат, затем измените входные данные; ошибка проверки означает, что результат отличается от ожидаемого.