Sobes.tech
Назад к вопросам
Middle
4

```javascript console.log("Start"); setTimeout(() => { console.log("Timeout 1"); Promise.resolve().then(() => console.log("Promise inside Timeout")); }, 0); Promise.resolve() .then(() => { console.log("Promise 0"); setTimeout(() => console.log("Timeout inside Promise"), 0); }) .catch(() => console.log("Promise 1")) .then(() => console.log("Promise 2")); requestAnimationFrame(() => { console.log("RequestAnimationFrame"); }); console.log("End"); ```

Компании, где спрашивали
Мыс

Ответ от нейросети

sobes.tech AI

Вывод будет следующим:

Start
End
Promise 0
Promise 2
Timeout 1
Promise inside Timeout
Timeout inside Promise
RequestAnimationFrame

Объяснение:

  1. Сначала выполняется синхронный код: console.log("Start") и console.log("End").
  2. Затем выполняются микротаски (microtasks) — это промисы:
    • Promise.resolve().then(() => { console.log("Promise 0"); ... }) — выводит "Promise 0".
    • После этого в цепочке .then(() => console.log("Promise 2")) — выводит "Promise 2".
  3. Макротаски (macrotasks) — таймауты с setTimeout с нулевой задержкой:
    • Первый setTimeout выводит "Timeout 1".
    • Внутри него создаётся промис, который ставится в микротаски и выводит "Promise inside Timeout".
    • Второй setTimeout внутри промиса выводит "Timeout inside Promise".
  4. requestAnimationFrame ставится в отдельную очередь и выполняется после макротасков, выводит "RequestAnimationFrame".

Таким образом, порядок основан на приоритетах микротасков (промисов), затем макротасков (таймаутов), и в конце requestAnimationFrame.