Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: callback, promise, async await, event loop, asynchronous

Какие инструменты в JavaScript используются для работы с асинхронностью?

Вопрос проверяет знание основных инструментов JavaScript для обработки асинхронных операций, что необходимо для написания неблокирующего кода.

Короткий ответ

В JavaScript для работы с асинхронностью исторически использовались колбэки (callbacks), но они вели к "аду колбэков". Промисы (Promises) предоставили более структурированный подход с методами .then() и .catch(). Современный синтаксис async/await позволяет писать асинхронный код, который выглядит как синхронный, что улучшает читаемость. Все эти механизмы работают поверх Event Loop, который управляет выполнением кода в однопоточном окружении.

Длинный ответ

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

Основные инструменты

  • Колбэки (Callbacks): Функции, передаваемые в качестве аргументов, которые вызываются после завершения асинхронной операции. Это базовый, но часто ведущий к сложному вложенному коду ("callback hell") механизм.
  • Промисы (Promises): Объекты, представляющие будущий результат операции. Они имеют состояния (pending, fulfilled, rejected) и методы .then() для обработки успеха и .catch() для обработки ошибок, что позволяет строить цепочки вызовов.
  • Async/Await: Синтаксический сахар над промисами, представленный в ES2017. Ключевое слово async объявляет асинхронную функцию, а await приостанавливает её выполнение до разрешения промиса, делая код линейным и легко читаемым.

Примеры кода

Сравним подходы на примере имитации получения данных:

// 1. Callback (старый стиль)
function fetchDataCallback(callback) {
  setTimeout(() => {
    callback(null, 'Данные получены');
  }, 1000);
}

fetchDataCallback((err, data) => {
  if (err) console.error(err);
  else console.log(data); // Через секунду: 'Данные получены'
});

// 2. Promise
function fetchDataPromise() {
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve('Данные получены'), 1000);
  });
}

fetchDataPromise()
  .then(data => console.log(data))
  .catch(err => console.error(err));

// 3. Async/Await (современный стиль)
async function getData() {
  try {
    const data = await fetchDataPromise(); // Ждём разрешения промиса
    console.log(data);
  } catch (err) {
    console.error(err);
  }
}
getData();

Где применяется

Эти инструменты используются повсеместно: для выполнения HTTP-запросов (fetch API, axios), работы с базами данных, чтения файлов в Node.js, обработки пользовательских событий и любых операций, где время выполнения неизвестно или велико.

Вывод: Для нового кода предпочтительно использовать async/await из-за чистоты и читаемости, но понимание промисов обязательно, так как async/await построен на них. Колбэки до сих пор встречаются в старом коде и некоторых API, поэтому их также нужно знать.

Уровень

  • Рейтинг:

    5

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#callback

#promise

#async await

#event loop

#asynchronous

Подпишись на React Developer в телеграм