> Расскажите про асинхронность в JavaScript и средства работы с асинхронным кодом (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: amoCRM, циан, ООО Премиум ИТ Солюшен, Spotware, Домклик, EPAM, ООО Рокет Тех, Rutube, TYMY, Purrweb, ООО Снэп АйТи

Стек: JavaScript

> Пример ответа

Асинхронность в JavaScript - это способность выполнять операции, не блокируя основной поток выполнения. Это критически важно для веб-приложений, так как JS однопоточный, и долгие синхронные задачи (например, запросы к серверу или чтение файла) "заморозили" бы интерфейс.

Основные средства работы с асинхронным кодом:

  1. Callbacks (колбэки) - функции, передаваемые в качестве аргумента и вызываемые после завершения операции. Пример:

    JAVASCRIPT
    setTimeout(() => console.log('Прошла секунда'), 1000);

    Недостаток: "ад колбэков" - вложенность ухудшает читаемость.

  2. Promises (промисы) - объект, представляющий будущий результат асинхронной операции. Имеет три состояния: pending, fulfilled, rejected. Позволяет цепочки .then(), .catch(), .finally():

    JAVASCRIPT
    fetch('/api/data')
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error(error));
  3. Async/await - синтаксический сахар над промисами, делающий асинхронный код похожим на синхронный. Функция с async всегда возвращает промис, а await приостанавливает выполнение до разрешения промиса:

    JAVASCRIPT
    async function getData() {
    try {
    const response = await fetch('/api/data');
    const data = await response.json();
    console.log(data);
    } catch (error) {
    console.error(error);
    }
    }
  4. Event Loop - механизм, обеспечивающий асинхронность: стек вызовов, очередь микрозадач (Promise, MutationObserver) и макрозадач (setTimeout, setInterval, I/O). Микрозадачи выполняются сразу после завершения текущего стека, до следующей макрозадачи.

На собеседовании важно показать понимание, как эти инструменты решают проблему блокировки потока, и уметь объяснить Event Loop на примере порядка вывода console.log.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью