
理解 Promise 執行順序
在 JavaScript 中,promise 用來處理非同步操作。 Promise 處理程序的執行順序可能會令人困惑,尤其是當存在巢狀 Promise 時。
程式碼的逐行分析
讓我們分析一下提供的程式碼行逐行了解執行順序:
-
第1 行: 建立一個立即解析為'A' 的Promise 並為其附加一個.then() 處理程序。
-
第 2 行: 當 Promise 解析為「A」並傳回「B」時,控制台記錄「2」。
-
第 5 行:另一個.then() 處理程序被加入到第 1 行所建立的 Promise 中。
-
第6-8 行: 建立一個解析為“C”的新Promise 並附加兩個.then() 處理程序該控制台分別記錄“7”和“8” 。
-
第 10 行:控制台記錄「3」並傳回「B」。
-
第 12 行- 14: 另一個 .then() 處理程序被加入到第 5 行所建立的 Promise 中。
-
第 15-17 行: 建立一個解析為「D」並附加的新 Promise兩個 .then() 處理程序分別控制台記錄「9」和「10」。
-
第 19 行:控制台記錄「4」。
-
第 22 行-24: 另一個 .then() 處理程序被加入到第 12 行所建立的 Promise 中。
-
第 27 行: 當 Promise 解析時,控制台記錄「5」。
執行順序
-
第1 行: Promise 已解決,控制台記錄「2 A」
-
第10 行: 控制台日誌「3 B」
-
第19 行: 控制台日誌「4 B」
-
第27 行: 控制台日誌「5 未定義」
-
第7 行: 控制台日誌「7 C」
-
第8 行: 控制台日誌「8 未定義」
-
第15 行: 控制台記錄「9 D」
-
第17 行: 控制台記錄「10 undefined」
-
第30 行: 控制台日誌「1」
-
第33 行: 控制台日誌「6」
討論
- Promise 處理程序是非同步調度的,因此它們會在目前執行執行緒完成後執行。
- 巢狀的 Promise 會建立沒有預定執行順序的獨立 Promise 鏈。
- 的順序Promise 的執行取決於 Promise 引擎的實作。在這種情況下,引擎在巨集任務 (setTimeout()) 之前使用調度微任務(promise 處理程序)。
- 不建議依賴巢狀 Promise 的特定執行順序。相反,鏈承諾明確控制其執行順序。
以上是JavaScript 中 Promise 處理程序的執行順序是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!