Другими словами, является ли код перед первым оператором ожидания выполненным синхронно?
Да.
Это указано в 25.7.5.1 спецификации:
25.7.5.1 AsyncFunctionStart (обещание емкости, asyncFunctionBody)
[логика возобновления выполнения когда-либо]
Вставить asyncContext в стек контекста выполнения; asyncContext теперь является запущенным контекстом выполнения.
Возобновить приостановленную оценку asyncContext. Пусть результат будет значением, возвращаемым возобновленным
вычисление.
Утверждение: когда мы вернемся сюда, asyncContext уже был удален из стека контекста выполнения и
runningContext - это текущий запущенный контекст выполнения.
Утверждение: результат - нормальное завершение со значением undefined. Возможные источники значений завершения
Ожидайте или, если асинхронная функция ничего не ждет, шаг 3.g выше.
Эта операция запускается при вызове асинхронной функции, и, как вы можете видеть, она непосредственно выполняет asyncContext , ничего не ожидая. Однако, если двигатель достигает значения await
, он активно останавливает выполнение:
6.2.3.1 Ожидают
[настроить логику, чтобы продолжить когда-нибудь]
- Удалите asyncContext из стека контекста выполнения и восстановите контекст выполнения, который находится вверху
стек контекста выполнения как текущий контекст выполнения.