PassFront
  1. PassFront
  2. База знаний
  3. Асинхронность и Event Loop

Как дождаться результата выполнения асинхронной операции?

Асинхронность и Event Loop

Результат асинхронной операции дожидаются через `await` (в async-функции), `.then()` у промиса или колбэк. Современный способ — `async/await`.

Способы дождаться результата

async/await (современный)

async function load() {
  const data = await fetchData(); // ждёт разрешения промиса
  console.log(data);
}

await приостанавливает функцию до разрешения промиса, не блокируя поток. Ошибки — через try/catch:

try {
  const data = await fetchData();
} catch (e) {
  handleError(e);
}

.then() у промиса

fetchData()
  .then((data) => console.log(data))
  .catch((error) => handleError(error));

Колбэк (legacy)

getData((error, data) => {
  if (error) handleError(error);
  else console.log(data);
});

Дождаться нескольких

// Параллельно
const [a, b] = await Promise.all([fetchA(), fetchB()]);
// Все со статусами
const results = await Promise.allSettled([...]);

Нюансы

  • await работает только внутри async-функции (или top-level await в модулях).
  • Нельзя «синхронно» дождаться промиса — только через await/then/колбэк.
  • Не блокировать поток ожиданием (асинхронность освобождает поток).

Коротко для собеседования

Результат асинхронной операции дожидаются через async/await (const data = await fetchData(), ошибки в try/catch) — современный способ, или .then()/.catch() у промиса, или колбэк (legacy). Несколько — через Promise.all. await работает в async-функции (или top-level в модулях); синхронно дождаться промиса нельзя.

Другие вопросы раздела