Колбэки, промисы и async/await
Вопрос
Расскажите, как эволюционировала асинхронность в JavaScript: колбэки, промисы, async/await. Что каждый шаг решил?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Колбэки: вложенность, разрозненная обработка ошибок, инверсия контроля
Промисы: объект-результат, цепочки, единый `catch`, гарантия одного вызова
`then` возвращает новый промис, значение или ошибка передаётся по цепочке
Комбинаторы `all`, `allSettled`, `race`, `any` для групп операций
async/await: синтаксис поверх промисов, `try/catch`, читается как синхронный код
Подводные камни: последовательные await вместо параллельных, забытый await, необработанные отклонения
Что могут спросить следом
- Что такое инверсия контроля в колбэках?
- Как выполнить три запроса параллельно и собрать результаты, даже если часть упала?
- Почему
awaitвнутриforEachне ждёт?
Разбор
Образцовый ответ: «Сначала были колбэки: функция принимает обработчик и вызывает его, когда готово. Проблемы: глубокая вложенность при последовательных шагах, обработка ошибок в каждом колбэке отдельно и инверсия контроля, мы отдаём чужому коду право вызвать наш колбэк когда угодно и сколько угодно раз. Промисы сделали результат объектом: его можно передавать, у него одно финальное состояние, обработчики вызываются ровно один раз и асинхронно. then возвращает новый промис, поэтому вложенность превращается в плоскую цепочку, а один catch в конце ловит ошибку любого шага. Для групп операций есть комбинаторы: all, allSettled, race, any. Async/await это синтаксис над промисами: код читается сверху вниз, ошибки ловит обычный try/catch. Но есть ловушки: последовательные await там, где запросы независимы и их надо запускать через Promise.all; await в forEach, который не ждёт; и отклонения без обработчика, которые в Node роняют процесс».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.