Ответ вслух Junior Асинхронные паттерны обновлено

Колбэки, промисы и async/await

Вопрос

Расскажи, как эволюционировала асинхронность в Node.js: колбэки, промисы, async/await. Что под капотом у await?

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

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

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

Коротко

Сначала в Node были колбэки по соглашению error-first: первый аргумент ошибка, второй результат. Это просто, но вложенные операции превращаются в пирамиду, а каждую ошибку надо проверять вручную.

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

  • Колбэки error-first: просто, но вложенность и легко потерять ошибку

  • Промисы: цепочки, единая обработка ошибок, комбинаторы all/allSettled/race/any

  • async/await: синтаксис над промисами, код читается как синхронный, try/catch

  • await приостанавливает только свою функцию, продолжение идёт микрозадачей

  • async-функция всегда возвращает промис

  • util.promisify и промис-версии модулей (fs/promises)

Что могут спросить следом

  • Что будет с ошибкой, если забыть await?
  • Как выполнить запросы параллельно с async/await?

Разбор

Сначала в Node были колбэки по соглашению error-first: первый аргумент ошибка, второй результат. Это просто, но вложенные операции превращаются в пирамиду, а каждую ошибку надо проверять вручную.

Промисы дали объект-результат будущей операции. Их можно возвращать, строить цепочки, ловить ошибки в одном catch и комбинировать через Promise.all, allSettled, race и any.

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

Старые колбэк-API я превращаю в промисы через util.promisify, но обычно хватает готовых модулей вроде fs/promises.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

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