Example Callstack And Event loop
Example callstack and event loop
#Example
async function abc() {
console.log(8);
await Promise.resolve(2).then(console.log);
console.log(3); // same .then(() => console.log(3))
}
setTimeout(() => console.log(1), 0);
abc();
Promise.resolve(4).then(console.log);
console.log(6);
js
#Information
Note
Macrotasks
: setTimeout , setInterval , setImmediate , requestAnimationFrame , I / O , giao diện người dùng renderMicrotasks
: process.nextTick , Promises , queueMicrotask , MutationObserver
#Explain
1. Chạy `setTimeout` => push `log(1)` vào `MacroTask Queue`
2. Chạy func `abc` => `log(8)` => push `log(2)` vào `MicroTask Queue` => `await`
`Output: 8`
3. push `log(4)` vào `MicroTask Queue`
4. `log(6)`
`Output: 8 6`
5. Thực thi `MicroTask Queue` có 2 callback `log(2)` và `log(4)`
`log(2)` => coi `log(3) là .then(() => log(3))` push `log(3)` vào `MicroTask Queue`
`log(4)` => `log(3)`
`Output: 8 6 2 4 3`
6. `MicroTask Queue` đã rỗng kết thúc turn => bắt đầu 1 turn mới thực thi `MacroTask Queue` có 1 callback `log(1)`
`log(1)`
`Output: 8 6 2 4 3 1`
md