Sobes.tech
Middle

FE forked forked forked forked forked forked ```JavaScript console.log('Timeout'); // 4 }, 0); let p = new Promise(function(resolve, reject) { console.log('Creating promise'); // 1 resolve(); }); p.then(function(){ console.log('Processing promise'); // 3 }); console.log('End of script'); // 2 Complex case console.log(1); setTimeout(() => console.log(2)); Promise.resolve().then(() => console.log(3)); Promise.resolve().then(() => setTimeout(() => console.log(4))); Promise.resolve().then(() => console.log(5)); setTimeout(() => console.log(6)); console.log(7); ```

sobes.tech AI

Answer from AI

Let's analyze the order of output in this JavaScript code, considering the event loop, microtasks (Promises), and macrotasks (setTimeout).

Code:

console.log(1);

setTimeout(() => console.log(2));

Promise.resolve().then(() => console.log(3));

Promise.resolve().then(() => setTimeout(() => console.log(4)));

Promise.resolve().then(() => console.log(5));

setTimeout(() => console.log(6));

console.log(7);

Explanation:

  • First, all synchronous code executes:

    • console.log(1) -> outputs 1
    • console.log(7) -> outputs 7
  • Then, microtasks (Promise.then) execute:

    • console.log(3)
    • setTimeout(() => console.log(4)) — this is a macrotask, added to the timeout queue
    • console.log(5)
  • After microtasks, macrotasks (setTimeout) execute:

    • console.log(2)
    • console.log(6)
    • console.log(4) (from setTimeout inside Promise.then)

Final output order:

1
7
3
5
2
6
4

This demonstrates that microtasks (Promises) execute immediately after synchronous code and before macrotasks (setTimeout), and that setTimeout inside a microtask is added to the macrotask queue and executed later.

FE forked forked forked forked forked forked… - sobes.tech