Skip to content

[JavaScript] 了解 Promise 的你知道這段程式碼的答案嗎?

Published: at 03:03 AM (2 min read)

Do you think you know promise?

這是一段幫助你更了解 PromiseCallStack/Microtask Queue 的程式碼,希望你在得到答案的同時,也更加了解 Promise 是如何運作的。

在看程式碼之前,我們要先知道 JavaScript 有幾個重要的運作原理:

new Promise(resolve => {
  resolve(1);

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

console.log(4);

接下來,我們來看看這段程式碼的執行順序:

A. Evaluate Script

  1. new Promise 的 Callback 函式放到 CallStack
  2. 執行 resolve(1)
  3. 執行 Promise.resolve(),將 () => console.log(2) 函式放到 Microtask Queue
  4. t => console.log(t) 函式放到 Microtask Queue
  5. 執行 console.log(3) 👉 3
  6. 清空 CallStack
  7. 執行 console.log(4) 👉 4

B. Run Microtasks

  1. A3 的函式放到 CallStack 執行 👉 2
  2. A4 的函式放到 CallStack 執行 👉 1

如果對於以上的解釋感到困惑,可以參考下方的 JavaScript visualizer 視覺化了解程式碼的執行

參考資料