我预计这段代码会运行,然后在2秒后,执行堆栈将变成空的,并且有一个setTimeout回调。我期待这一点,因为我期望消息队列和作业队列为空(因为promise尚未解析)。因此,首先打印Callback,然后在3秒后解析promise,将其回调放入作业队列,并打印消息Promise is resolved。但事实并非如此。那么我在这里错过了什么呢?
如果promise创建了一个新的微任务回调,并且所有微任务在处理下一个宏任务之前都已解决,为什么promise不阻止事件循环?这是一个答案,解释承诺就像一个事件通知系统,显然这是真的,因为承诺不会阻止,这就是重点: Do Javascript promises block the stack 但要清楚的是,如果回调被添加到微队列,并且该队列必须清空才能继续执行下一