Порядок вывода: 1, 5, 8, 3, 6, 2, 7, 4. console.log(5) вычисляется как аргумент Promise.resolve синхронно, а не откладывается в микрозадачу.
Определение порядка вывода в консоль – задача №27
Порядок вывода: 1, 5, 8, 3, 6, 2, 7, 4. console.log(5) вычисляется как аргумент Promise.resolve синхронно, а не откладывается в микрозадачу.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Укажите порядок, в котором будут напечатаны значения в консоль.
console.log(1);
setTimeout(() => console.log(2));
Promise.resolve().then(() => console.log(3));
Promise.resolve().then(() => setTimeout(() => console.log(4)));
Promise.resolve(console.log(5)).then(() => console.log(6));
setTimeout(() => console.log(7));
console.log(8);
Ответ
Порядок вывода: 1, 5, 8, 3, 6, 2, 7, 4. console.log(5) вычисляется как аргумент Promise.resolve синхронно, а не откладывается в микрозадачу.
Затем синхронно печатается 8. Очередь микрозадач выводит 3, регистрирует таймер 4 и выводит 6. После этого выполняются таймеры: ранее зарегистрированные 2 и 7, потом созданный из then таймер 4. Promise.resolve получает результат console.log(5), то есть undefined; это не мешает следующему then вывести 6.