Назад к вопросам
Middle
78
questionbank

Как вы работаете с асинхронным JavaScript?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

С асинхронностью в JavaScript работаю с использованием коллбэков, промисов и async/await.

Коллбэки – это функции, которые передаются в другие функции в качестве аргументов и выполняются после завершения какой-либо операции. Могут приводить к "адскому коллбэков" при вложенности.

// Пример коллбэка
function fetchData(callback) {
  setTimeout(() => {
    callback("Данные получены");
  }, 1000);
}

fetchData((data) => {
  console.log(data); // Выведет "Данные получены" через 1 секунду
});

Промисы – объекты, представляющие конечное завершение или неудачу асинхронной операции. Упрощают работу с асинхронным кодом, позволяют избежать глубокой вложенности. Имеют три состояния: pending (ожидание), fulfilled (выполнено успешно), rejected (отклонено).

// Пример промиса
function fetchDataPromise() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Данные получены");
    }, 1000);
  });
}

fetchDataPromise()
  .then((data) => {
    console.log(data); // Выведет "Данные получены" через 1 секунду
  })
  .catch((error) => {
    console.error("Ошибка:", error);
  });

Async/await – синтаксический сахар над промисами, который делает асинхронный код более читаемым, похожим на синхронный. Функция, помеченная async, всегда возвращает промис. Оператор await может использоваться только внутри async функции и приостанавливает выполнение до тех пор, пока промис не будет выполнен (resolved) или отклонен (rejected).

// Пример async/await
async function fetchDataAsync() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Данные получены");
    }, 1000);
  });
}

async function processData() {
  try {
    const data = await fetchDataAsync();
    console.log(data); // Выведет "Данные получены" через 1 секунду
  } catch (error) {
    console.error("Ошибка:", error);
  }
}

processData();

Часто использую async/await при работе с API-запросами, так как это наиболее удобный и читаемый способ обработки асинхронных операций. При необходимости параллельного выполнения нескольких асинхронных операций использую Promise.all() или Promise.allSettled().

Использую event loop для понимания порядка выполнения асинхронного кода, микротасков и макротасков.