Что напечатает консоль в примере №12

Порядок: 🍏, 🍈, 🍉, 🍇, 🍍, 🍌, 🍋. Микрозадача с бананом выполняется после первого таймера, но до второго таймера с лимоном.

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

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

Порядок: 🍏, 🍈, 🍉, 🍇, 🍍, 🍌, 🍋. Микрозадача с бананом выполняется после первого таймера, но до второго таймера с лимоном.

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

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

Условие

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

const ZERO_MS = 0;

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

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

  setTimeout(() => {
    printConsole('🍍');
    Promise.resolve('🍌').then(printConsole);
  }, ZERO_MS);

  setTimeout(printConsole, ZERO_MS, '🍋');

  Promise.resolve('🍉').then(printConsole);
  Promise.resolve('🍇').then(printConsole);

  printConsole('🍈');
}

task2();

Ответ

Порядок: 🍏, 🍈, 🍉, 🍇, 🍍, 🍌, 🍋. Микрозадача с бананом выполняется после первого таймера, но до второго таймера с лимоном.

В теле task2 синхронно печатаются яблоко и дыня. После завершения текущего кода очередь then последовательно выводит арбуз и виноград.

Первый таймер выводит ананас и регистрирует then для уже завершённого Promise с бананом. Перед переходом к следующей задаче event loop выполняет эту микрозадачу. Затем второй таймер получает лимон как дополнительный аргумент setTimeout и выводит его. Нулевая задержка не означает выполнение таймера прямо в месте регистрации.

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

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

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

Подробнее