事件循环以不同的方式处理promise嵌套和链接的方式使我感到困惑。请考虑下面我写的两个sudo-javascript代码段...
方案1-嵌套的诺言
new Promise(()=>{console.log("one")})
new Promise(()=>{new Promise(()=>{console.log("2.5")}))
new Promise(()=>{console.log("three")})
输出-
一个
2.5
三个
方案2-链接的诺言
new Promise(()=>{console.log("one")})
new Promise().then(()=>{console.log("2.5")})
new Promise(()=>{console.log("three")})
输出-
一个
三个
2.5
我知道上面的说法是正确的,并且会发生。但是,基于网上关于诺言在栈->堆/事件表->事件队列->栈->重复中的许多过度简化的解释,我感到非常困惑。方案1-第2行如何设法阻止代码的第三行,以便其嵌套承诺完成。我以为:
1.在scenario1-line2上发送给新promise的函数将通过事件表传递到事件队列
2.然后,一旦堆栈为空,函数就会运行,创建我嵌套的诺言
3.在此阶段,由于外部承诺是异步的,所以方案1行3承诺已经运行。
我的误会在哪里?