Выбор ответа Junior Event loop обновлено

Блокирует ли await поток

Вопрос

Что происходит с потоком, когда async-функция доходит до await fetch(url)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Функция встаёт на паузу и отдаёт поток, а продолжение придёт микрозадачей. await приостанавливает только текущую async-функцию: она возвращает вызывающему коду промис, и поток свободен для остального кода, обработки событий и отрисовки.

Варианты ответа

  1. Поток блокируется, пока не придёт ответ, а события копятся в очереди
  2. Браузер создаёт новый поток, в котором и продолжится выполнение функции
  3. Функция встаёт на паузу и отдаёт поток, а продолжение придёт микрозадачейправильный ответ
  4. await превращает запрос в синхронный, как XMLHttpRequest с флагом false

Разбор

await приостанавливает только текущую async-функцию: она возвращает вызывающему коду промис, и поток свободен для остального кода, обработки событий и отрисовки. Когда промис выполнится, продолжение функции будет поставлено в очередь микрозадач. Новых потоков await не создаёт, сам запрос ведёт браузер вне JS-потока. Синхронным fetch не становится.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме