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.