async/await
Вопрос
Что делает async/await под капотом и чем отличается от then?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
async-функция всегда возвращает промис
await приостанавливает функцию и подписывается на промис
остаток функции выполняется в микрозадаче
try/catch вокруг await ловит отклонение
последовательные await выполняются по очереди - это частая причина медленной загрузки
параллельность даёт Promise.all или запуск промисов до await
Что могут спросить следом
- Как сделать параллельно, но не больше N одновременно
- Что будет с await внутри forEach
- Где await на верхнем уровне разрешён
Разбор
async заставляет функцию всегда возвращать промис; await приостанавливает её
выполнение, подписывается на промис, а остаток тела попадает в микрозадачу. Семантически
это тот же then, но с линейным чтением и рабочим try/catch.
Главная ловушка - случайная последовательность:
const a = await getA(); // ждём
const b = await getB(); // и только потом второй запрос
const [a, b] = await Promise.all([getA(), getB()]); // правильно
В цикле то же самое: for...of с await внутри - строго по одному.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.