Как работает
await в
async функциях?
Т.к. в JS нет многопоточности, то асинхронность на себя берет окружение JS. Пример с
setTimeout - ом ясен, если же ему не передать
delay, то он сработает после завершения кода, который находится в
callback. Т.е. для него нужно, чтобы стек был освобожден и интерпретатор "отдыхал". А как работает asyc/await?
Есть мое предположение что на стадии компиляции (когда он только объявляет переменные) интерпретатор за ранее расставляет все в
message queue.
Если я все еще плохо объяснил, то вот пример:
async function foo ( ) {
await Promise ( resolve => setTimeout ( ( ) => resolve, 1000 ));
let rabbit = "jump";
//Еще какие-то функции ниже.
}
Что происходит с rabbit и остальными действиями ниже? Куда они попадают, как и что заставляет ждать код ниже?