Порядок: 1, 2, 4, 3. Executor вызывается синхронно при создании Promise, а обработчик then выполняется позже как микрозадача.
Когда выполняется executor Promise
Порядок: 1, 2, 4, 3. Executor вызывается синхронно при создании Promise, а обработчик then выполняется позже как микрозадача.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите вывод:
console.log(1);
new Promise(resolve => {
console.log(2);
resolve(3);
}).then(console.log);
console.log(4);
Ответ
Порядок: 1, 2, 4, 3. Executor вызывается синхронно при создании Promise, а обработчик then выполняется позже как микрозадача.
Resolve меняет состояние Promise, но не запускает зарегистрированные реакции внутри текущего стека. Поэтому внешний console.log(4) успевает раньше then. Тяжёлые вычисления внутри executor всё равно блокируют поток: сама упаковка работы в new Promise не делает её фоновой.