Взаимодействие setTimeout и Promise при разных задержках

Обычно порядок такой: setTimeout2, setTimeout1, Promise 1, Promise 3, setTimeout4, Promise 2, setTimeout3, Promise. Promise здесь завершается только после своего таймера.

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

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

Обычно порядок такой: setTimeout2, setTimeout1, Promise 1, Promise 3, setTimeout4, Promise 2, setTimeout3, Promise. Promise здесь завершается только после своего таймера.

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

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

Условие

Необходимо объяснить, в каком порядке появятся сообщения в консоли, когда одновременно используются функции setTimeout и промисы с различными тайм‑аутами.

(() => {
  const myPromise = (delay) => new Promise((res, rej) => {
    setTimeout(res, delay);
  });

  setTimeout(() => console.log("in setTimeout1"), 1000);
  myPromise(1000).then(res => console.log("in Promise 1"));

  setTimeout(() => console.log("in setTimeout2"), 100);

  myPromise(2000).then(res => console.log("in Promise 2"));

  setTimeout(() => console.log("in setTimeout3"), 2000);
  myPromise(1000).then(res => console.log("in Promise 3"));

  setTimeout(() => console.log("in setTimeout4"), 1000);
  myPromise(5000).then(res => console.log("in Promise"));
})();

Ответ

Обычно порядок такой: setTimeout2, setTimeout1, Promise 1, Promise 3, setTimeout4, Promise 2, setTimeout3, Promise. Promise здесь завершается только после своего таймера.

На отметке около 100 мс выполняется setTimeout2. Таймеры с задержкой 1000 мс зарегистрированы последовательно: setTimeout1, разрешение Promise 1, разрешение Promise 3, setTimeout4. После каждого разрешения соответствующий then выполняется как микрозадача до следующего таймера.

Аналогично около 2000 мс Promise 2 выводится перед setTimeout3; последний Promise ждёт 5000 мс. Все сроки минимальные и зависят от загрузки окружения. Промис не «обгоняет» таймер, который должен сначала его разрешить.

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

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

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

Подробнее