事件循环如何不同地处理承诺嵌套和链接

时间:2019-06-26 16:41:30

标签: javascript asynchronous event-loop

事件循环以不同的方式处理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承诺已经运行。
我的误会在哪里?

0 个答案:

没有答案