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 render
  • Microtasks: 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`  2 callback `log(2)`  `log(4)`
   `log(2)` => coi `log(3)  .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`  1 callback `log(1)`
   `log(1)`
   `Output: 8 6 2 4 3 1`
md