Skip to main content

Editable event-loop - intermediate

Timer Inside Promise

Move timer registration inside or outside promise callbacks and watch queue order change.

partially simulatedcurated scenariodoes not execute real code
Short answer

The key output order is promise -> timer -> nested timer. The promise runs first, but its new timer is queued behind the timer that already exists.

Real-world bug this helps solve

Console output or cleanup runs in an order that does not match the source code order. This shows up in promise-based setup that schedules fallback timers.

Common wrong assumption

Thinking code created earlier in source always runs earlier.

Fix direction

Make ordering explicit instead of relying on when a queued callback might happen to run.

Fixed code pattern
Promise.resolve().then(handleMicrotask);
setTimeout(handleTimer, 0);
// Assert/expect the microtask before the timer.
Visual proof

The console lane proves the visible order: promise -> timer -> nested timer. The active line and queues show why source order changed.

How to verify in a real app

Add temporary logs around the sync line, promise callback, and timer, then confirm the order without adding arbitrary delays.

Share
Loading editable case...

Related cases

Continue with nearby confusion while the mental model is fresh.

Recommended next

Was this clear?

This stays local for now. It helps you track where the product still needs sharper cases.

Send detail