Вывод: 7, 2, 5, 1, 4, 6, 3. Promise с выводом 4 сначала ждёт своего таймера, а таймер с 3 регистрируется только из микрозадачи.
Что отобразится в консоли при выполнении данного JavaScript‑кода
Вывод: 7, 2, 5, 1, 4, 6, 3. Promise с выводом 4 сначала ждёт своего таймера, а таймер с 3 регистрируется только из микрозадачи.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Нужно предсказать, какие значения появятся в консоли после запуска следующего фрагмента кода.
setTimeout(() => console.log(1));
Promise.reject(2).catch(console.log);
Promise.resolve().then(() => setTimeout(() => console.log(3)));
new Promise((resolve) => setTimeout(resolve)).then(() => console.log(4));
Promise.resolve(5).then(console.log);
setTimeout(() => console.log(6));
console.log(7);
Ответ
Вывод: 7, 2, 5, 1, 4, 6, 3. Promise с выводом 4 сначала ждёт своего таймера, а таймер с 3 регистрируется только из микрозадачи.
Синхронно печатается 7. В начальной очереди микрозадач находятся catch с 2, регистрация таймера 3 и then с 5 — поэтому видимые сообщения здесь 2 и 5.
К этому моменту раньше таймера 3 уже зарегистрированы таймер 1, таймер разрешения Promise для 4 и таймер 6. После разрешения второго из них микрозадача then выводит 4 до следующей задачи с 6. Последним исполняется отложенный из микрозадачи таймер 3.