理解 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中文网其他相关文章!