Как работает и реализован 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