Определите, что будет выведено в консоль и почему (задание 11)

Порядок вывода: 🍏, 🍇, 🍉, 🍋. Синхронные сообщения идут первыми, обработчик Promise — в микрозадаче, таймер — позже.

Короткий ответ

Что ответить на собеседовании

Порядок вывода: 🍏, 🍇, 🍉, 🍋. Синхронные сообщения идут первыми, обработчик Promise — в микрозадаче, таймер — позже.

Подробный разбор

Ответ с пояснениями

Условие

Определите порядок вывода в консоль и объясните, почему именно в таком виде появляются данные.

const ZERO_MS = 0;

function printConsole(arg) {
  console.log(arg);
}

function task1() {
  printConsole('🍏');

  setTimeout(printConsole, ZERO_MS, '🍋');

  new Promise(resolve => {
    resolve('🍉');
  }).then(printConsole);

  printConsole('🍇');
}

task1();

Ответ

Порядок вывода: 🍏, 🍇, 🍉, 🍋. Синхронные сообщения идут первыми, обработчик Promise — в микрозадаче, таймер — позже.

Исполнитель Promise вызывается сразу, но он лишь выполняет resolve. Сам printConsole из then попадёт в очередь микрозадач. ZERO_MS равен нулю, однако setTimeout всё равно не прерывает текущую функцию и не обгоняет её синхронные строки.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее