Порядок: start, executor, end, timer, then. Executor нового Promise запускается синхронно; реакция then ждёт разрешения Promise внутри таймера.
Когда выполняется executor Promise относительно таймера?
Порядок: start, executor, end, timer, then. Executor нового Promise запускается синхронно; реакция then ждёт разрешения Promise внутри таймера.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите вывод браузерного кода:
console.log('start');
new Promise(resolve => {
console.log('executor');
setTimeout(() => { console.log('timer'); resolve(); }, 0);
}).then(() => console.log('then'));
console.log('end');
Ответ
Порядок: start, executor, end, timer, then. Executor нового Promise запускается синхронно; реакция then ждёт разрешения Promise внутри таймера.
Наличие Promise вокруг executor не переносит его тело в фон. Таймер срабатывает после завершения начального скрипта, печатает timer и вызывает resolve. Только тогда для зарегистрированного then планируется реакция. Promise описывает будущий результат, но не делает любую переданную ему работу автоматически асинхронной.
Источник: developer.mozilla.org.