Как отработает вложенный Async/Await?
Асинхронность и Event Loop
Вложенный async/await выполняется последовательно: внешний `await` ждёт завершения внутренней async-функции (со всеми её `await`) перед продолжением. Каждый `await` приостанавливает выполнение.
Как выполняется вложенный async/await
Внешняя функция ждёт полного завершения внутренней:
async function inner() {
console.log('inner start');
await delay(100);
console.log('inner end');
return 'результат';
}
async function outer() {
console.log('outer start');
const result = await inner(); // ждёт inner ПОЛНОСТЬЮ (включая её await)
console.log('outer end', result);
}
outer();
// outer start → inner start → inner end → outer end результатawait inner() приостанавливает outer, пока inner не завершится со всеми своими await.
Последовательность (не параллельность)
Вложенные/последовательные await выполняются по очереди:
const a = await fetchA(); // сначала это
const b = await fetchB(); // потом это (ждёт a)
// суммарное время = A + BДля параллельности — Promise.all
const [a, b] = await Promise.all([fetchA(), fetchB()]);
// одновременно, время = max(A, B)Микрозадачи
Каждый await ставит продолжение в очередь микрозадач:
async function fn() {
console.log('1');
await null; // здесь — точка возобновления (микрозадача)
console.log('3');
}
fn();
console.log('2');
// 1, 2, 3Коротко для собеседования
Вложенный async/await выполняется последовательно: внешний await ждёт полного завершения внутренней async-функции со всеми её await, прежде чем продолжить. Последовательные await идут по очереди (время суммируется) — для параллельности используют Promise.all. Каждый await ставит продолжение в микрозадачу.