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

Как работает и реализован Async/Await?

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

`async/await` — это синтаксический сахар над промисами, позволяющий писать асинхронный код в синхронном стиле. Внутри он работает через тот же механизм промисов и микрозадач.

Основы

  • async перед функцией делает так, что она всегда возвращает промис.
  • await приостанавливает выполнение функции до разрешения промиса, не блокируя основной поток.
async function loadUser(id) {
  const res = await fetch(`/users/${id}`);
  const user = await res.json();
  return user; // обернётся в промис
}

Как это работает под капотом

await разбивает функцию на части: код после await становится коллбэком, который ставится в очередь микрозадач после разрешения промиса. Функция «замораживается» и возобновляется по готовности.

async function demo() {
  console.log('1');
  await null;          // здесь — точка возобновления как микрозадача
  console.log('3');
}
demo();
console.log('2');
// Порядок: 1, 2, 3

Обработка ошибок

try {
  const data = await loadUser(1);
} catch (e) {
  console.error(e); // ловит reject
}

Параллельность

await в цикле выполняет последовательно. Для параллели — Promise.all:

const [a, b] = await Promise.all([loadUser(1), loadUser(2)]);

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

async возвращает промис, await ждёт его разрешения, ставя продолжение в микрозадачу. Ошибки ловятся через try/catch. Для параллельных операций — Promise.all, а не последовательные await.

Подробнее: learn.javascript.ru — async/await

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