Ответ вслух Junior Промисы и async/await спрашивают часто обновлено

async/await

Вопрос

Что делает async/await под капотом и чем отличается от then?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

async заставляет функцию всегда возвращать промис; await приостанавливает её выполнение, подписывается на промис, а остаток тела попадает в микрозадачу. Семантически это тот же then, но с линейным чтением и рабочим try/catch.

Что должно прозвучать в ответе

  • 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 ошибок.

Термины по теме