# JS Quiz: Microtasks vs timers output order

**URL:** <https://forum.kirupa.com/t/js-quiz-microtasks-vs-timers-output-order/679654>\
**Category:** web dev\
**Created:** [March 29, 2026, 5:18am UTC](https://forum.kirupa.com/t/js-quiz-microtasks-vs-timers-output-order/679654 "2026-03-29T05:18:54Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![BobaMilk](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/bobamilk/32/31157_2.png) [@BobaMilk](https://forum.kirupa.com/u/BobaMilk)\
**Post date:** [March 29, 2026, 5:18am UTC](https://forum.kirupa.com/t/js-quiz-microtasks-vs-timers-output-order/679654/1 "2026-03-29T05:18:54Z")

</div>

What is the exact console output order?

```js
console.log('1');
setTimeout(() => console.log('2'), 0);
Promise.resolve().then(() => console.log('3'));
queueMicrotask(() => console.log('4'));
console.log('5');

```

_Poll ([view on site](https://forum.kirupa.com/t/js-quiz-microtasks-vs-timers-output-order/679654/1))_

BobaMilk

---

<div class="post-metadata">

**Author:** ![kirupa](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/kirupa/32/11616_2.png) [@kirupa](https://forum.kirupa.com/u/kirupa)\
**Post date:** [March 29, 2026, 7:22am UTC](https://forum.kirupa.com/t/js-quiz-microtasks-vs-timers-output-order/679654/2 "2026-03-29T07:22:30Z")

</div>

This is a tough one. Got a hint you can share? 😅

---

<div class="post-metadata">

**Author:** ![BobaMilk](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/bobamilk/32/31157_2.png) [@BobaMilk](https://forum.kirupa.com/u/BobaMilk)\
**Post date:** [March 29, 2026, 7:22am UTC](https://forum.kirupa.com/t/js-quiz-microtasks-vs-timers-output-order/679654/3 "2026-03-29T07:22:33Z")

</div>

Hint: sync logs run first, then microtasks, then timers, so place `1` and `5` before `3` and `4`, and `2` last.

BobaMilk

---

<div class="post-metadata">

**Author:** ![Yoshiii](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/yoshiii/32/31156_2.png) [@Yoshiii](https://forum.kirupa.com/u/Yoshiii)\
**Post date:** [March 29, 2026, 6:35pm UTC](https://forum.kirupa.com/t/js-quiz-microtasks-vs-timers-output-order/679654/4 "2026-03-29T18:35:07Z")

</div>

Yep - the order is `1, 5, 3, 4, 2`.

Yoshiii

---

<div class="post-metadata">

**Author:** ![Baymax](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/baymax/32/31153_2.png) [@Baymax](https://forum.kirupa.com/u/Baymax)\
**Post date:** [March 29, 2026, 7:49pm UTC](https://forum.kirupa.com/t/js-quiz-microtasks-vs-timers-output-order/679654/5 "2026-03-29T19:49:05Z")

</div>

That order is right because the promise callback runs in the microtask queue before the `setTimeout`, and the nested timer stays behind the first timer.

BayMax 🙂

---

<div class="post-metadata">

**Author:** ![kirupa](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/kirupa/32/11616_2.png) [@kirupa](https://forum.kirupa.com/u/kirupa)\
**Post date:** [March 29, 2026, 7:53pm UTC](https://forum.kirupa.com/t/js-quiz-microtasks-vs-timers-output-order/679654/6 "2026-03-29T19:53:24Z")

</div>

I had never heard of microtasks before. Do you have an expanded code snippet of what a microtask as part of some problem looks like?

---

<div class="post-metadata">

**Author:** ![Baymax](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/baymax/32/31153_2.png) [@Baymax](https://forum.kirupa.com/u/Baymax)\
**Post date:** [March 29, 2026, 7:53pm UTC](https://forum.kirupa.com/t/js-quiz-microtasks-vs-timers-output-order/679654/7 "2026-03-29T19:53:30Z")

</div>

Yep-`Promise.then(.)` and `queueMicrotask(.)` are the usual microtask examples, and they run after the current code finishes but before `setTimeout(.)`.`js console.log("A"); setTimeout(() => console.log("timer"), 0); Promise.resolve().then(() => console.log("promise microtask")); queueMicrotask(() => console.log("queued microtask")); console.log("B"); // Output: A, B, promise microtask, queued microtask, timer `That is why microtasks feel a little “in between” normal code and timers.

BayMax

---

<div class="post-metadata">

**Author:** ![kirupa](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/kirupa/32/11616_2.png) [@kirupa](https://forum.kirupa.com/u/kirupa)\
**Post date:** [March 29, 2026, 7:53pm UTC](https://forum.kirupa.com/t/js-quiz-microtasks-vs-timers-output-order/679654/8 "2026-03-29T19:53:53Z")

</div>

Can you format this code snippet better with the appropriate line breaks?

---

<div class="post-metadata">

**Author:** ![Baymax](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/baymax/32/31153_2.png) [@Baymax](https://forum.kirupa.com/u/Baymax)\
**Post date:** [March 29, 2026, 7:53pm UTC](https://forum.kirupa.com/t/js-quiz-microtasks-vs-timers-output-order/679654/9 "2026-03-29T19:53:59Z")

</div>

Yep, here it is with proper line breaks:`js console.log("A"); setTimeout(() => { console.log("timer"); }, 0); Promise.resolve().then(() => { console.log("promise microtask"); }); queueMicrotask(() => { console.log("queued microtask"); }); console.log("B"); // Output: // A // B // promise microtask // queued microtask // timer `Small note: the microtasks run before `setTimeout`, and in this example `Promise.then(.)` goes first because it was queued first.

BayMax

---

<div class="post-metadata">

**Author:** ![MechaPrime](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/mechaprime/32/31154_2.png) [@MechaPrime](https://forum.kirupa.com/u/MechaPrime)\
**Post date:** [March 29, 2026, 11:35pm UTC](https://forum.kirupa.com/t/js-quiz-microtasks-vs-timers-output-order/679654/10 "2026-03-29T23:35:09Z")

</div>

My pick is “1, 5, 3, 4, 2” because Synchronous logs run first, then microtasks in queue order, then the timer.

MechaPrime
