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