> Расскажите про асинхронность в JavaScript и средства работы с асинхронным кодом (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: amoCRM, циан, ООО Премиум ИТ Солюшен, Spotware, Домклик, EPAM, ООО Рокет Тех, Rutube, TYMY, Purrweb, ООО Снэп АйТи
Стек: JavaScript
> Пример ответа
Асинхронность в JavaScript - это способность выполнять операции, не блокируя основной поток выполнения. Это критически важно для веб-приложений, так как JS однопоточный, и долгие синхронные задачи (например, запросы к серверу или чтение файла) "заморозили" бы интерфейс.
Основные средства работы с асинхронным кодом:
-
Callbacks (колбэки) - функции, передаваемые в качестве аргумента и вызываемые после завершения операции. Пример:
JAVASCRIPTsetTimeout(() => console.log('Прошла секунда'), 1000);Недостаток: "ад колбэков" - вложенность ухудшает читаемость.
-
Promises (промисы) - объект, представляющий будущий результат асинхронной операции. Имеет три состояния:
pending,fulfilled,rejected. Позволяет цепочки.then(),.catch(),.finally():JAVASCRIPTfetch('/api/data').then(response => response.json()).then(data => console.log(data)).catch(error => console.error(error)); -
Async/await - синтаксический сахар над промисами, делающий асинхронный код похожим на синхронный. Функция с
asyncвсегда возвращает промис, аawaitприостанавливает выполнение до разрешения промиса:JAVASCRIPTasync function getData() {try {const response = await fetch('/api/data');const data = await response.json();console.log(data);} catch (error) {console.error(error);}} -
Event Loop - механизм, обеспечивающий асинхронность: стек вызовов, очередь микрозадач (Promise, MutationObserver) и макрозадач (setTimeout, setInterval, I/O). Микрозадачи выполняются сразу после завершения текущего стека, до следующей макрозадачи.
На собеседовании важно показать понимание, как эти инструменты решают проблему блокировки потока, и уметь объяснить Event Loop на примере порядка вывода console.log.
> Похожие задачи по frontend
Как избежать ошибки при обращении к свойству объекта, если объект undefined?
В чем разница function declaration, function expression и стрелочной функции в JavaScript
Зачем нужен async/await в JavaScript
Каковы преимущества optional chaining в JavaScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью