πŸ”΄ HardEvent Loop & PromisesπŸ’» Output Question

Nested setTimeout and Promise

πŸ’‘

Hint

Each macrotask fully drains the microtask queue before the next macrotask runs.

What does this output?

console.log('start');

setTimeout(() => {
  console.log('timeout 1');
  Promise.resolve().then(() => console.log('promise inside timeout'));
}, 0);

Promise.resolve()
  .then(() => {
    console.log('promise 1');
    setTimeout(() => console.log('timeout inside promise'), 0);
  })
  .then(() => console.log('promise 2'));

console.log('end');

Correct Output

start
end
promise 1
promise 2
timeout 1
promise inside timeout
timeout inside promise

Why this output?

Explanation: 1. Sync: "start", "end"
2. Microtask queue: "promise 1" (queues a setTimeout), then "promise 2"
3. Macrotask: "timeout 1" (queues a microtask), then its microtask "promise inside timeout"
4. Last macrotask: "timeout inside promise"

Key Insight: Each macrotask fully drains the microtask queue before the next macrotask runs.

More Event Loop & Promises Output Questions

🟑 MediumClassic setTimeout vs Promiseβ†’πŸŸ‘ Mediumasync/await execution orderβ†’πŸ”΄ HardPromise chaining orderβ†’πŸŸ‘ MediumPromise constructor is synchronousβ†’

Practice predicting output live β†’

66 output questions with instant feedback

πŸ’» Try Output Quiz