异步改变Promise状态与then调用顺序
“异步改变Promise状态与then调用顺序”
我实际操作了下,代码如下:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body></body><script>const p1 = new Promise((resolve, reject) => {setTimeout(() => {console.log('1');resolve('This is GOOD');}, 5000);});console.log('2');p1.then((value) => {console.log('3');console.log(value);});console.log('4');</script>
</html>
最终在控制台输出顺序 2 4 1 3。
单纯理解事件循环,按照微任务优先级>宏任务优先级的机制,应该输出2 4 3 1,问题在哪?
事件循环是对 执行的函数 按优先级执行,没有被执行的则谈不上这个机制。
在Promise里,Promise实例的then方法只有实例状态从pending改变才会被推入微任务队列执行,在状态改变前,只会记录成功和失败的回调函数引用而不执行。