Как написано, вывода нет: функция run только объявлена. Если вызвать run(), порядок будет 1, 'Promise', 4, 'timeOut', '777', 'then1', 'then2', 'timeOut2'.
Определение порядка вывода в консоль (пример 60)
Как написано, вывода нет: функция run только объявлена. Если вызвать run(), порядок будет 1, 'Promise', 4, 'timeOut', '777', 'then1', 'then2', 'timeOut2'.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, в какой последовательности будут напечатаны сообщения в консоль:
const run = () => {
setTimeout(() => {
console.log('timeOut');
}, 0);
console.log(1);
new Promise(resolve => {
console.log('Promise');
setTimeout(() => {
console.log('777');
resolve();
}, 0);
})
.then(() => {
console.log('then1');
})
.then(() => {
console.log('then2');
});
console.log(4);
setTimeout(() => {
console.log('timeOut2');
}, 0);
};
Ответ
Как написано, вывода нет: функция run только объявлена. Если вызвать run(), порядок будет 1, 'Promise', 4, 'timeOut', '777', 'then1', 'then2', 'timeOut2'.
Executor Promise печатает Promise синхронно. После завершения run сначала выполняется первый таймер timeOut, затем таймер с 777 и resolve. Разрешение Promise ставит then1, а затем then2 в очередь микрозадач; они выполняются до следующего таймера timeOut2. Нельзя ставить все таймеры перед всеми then без учёта того, какой таймер разрешает конкретный Promise.