Javascript 如何解释此代码段的输出顺序?

Javascript 如何解释此代码段的输出顺序?,javascript,event-loop,Javascript,Event Loop,新承诺((解决、拒绝)=>{ console.log(“外部承诺”) 解决() }) .然后(()=>{ console.log('outer1 then') 新承诺((解决、拒绝)=>{ console.log('in promise') 解决() }) .然后(()=>{ console.log('in 1 then') 返回承诺。解决() }) .然后(()=>{ log('in 2 then') }) }) .然后(()=>{ console.log('outer2 then') })

新承诺((解决、拒绝)=>{
console.log(“外部承诺”)
解决()
})
.然后(()=>{
console.log('outer1 then')
新承诺((解决、拒绝)=>{
console.log('in promise')
解决()
})
.然后(()=>{
console.log('in 1 then')
返回承诺。解决()
})
.然后(()=>{
log('in 2 then')
})
})
.然后(()=>{
console.log('outer2 then')
})
.然后(()=>{
log('outer3 then')
})
.然后(()=>{
log('outer4 then')

})
我会把它推到未定义行为的角落。您不应该依赖JavaScript引擎的内部来执行
然后按特定顺序执行
回调。我可以想象两种适合给定代码的场景

  • 内部任务应该在外部任务之前运行。在这里,你应该确保你回报了内心的承诺。然后可以移动内部
    调用,然后
    调用,并将它们添加到外部承诺链中

    新承诺((解决、拒绝)=>{
    console.log(“外部承诺”);
    解决();
    })
    .然后(()=>{
    console.log('outer1 then');
    返回新承诺((解决,拒绝)=>{//{
    log('in 1 then');
    返回承诺。解决();
    })
    .然后(()=>{
    log('in 2 then');
    })
    .然后(()=>{
    console.log('outer2 then');
    })
    .然后(()=>{
    console.log('outer3 then');
    })
    .然后(()=>{
    console.log('outer4 then');
    
    })
    首先,然后你必须返回允诺我知道,每个
    然后
    都会返回一个允诺我说的是你的
    新允诺
    在第一个内部调用,如果你不返回它,那么它会立即解决,但在这里,它也会立即解决,因为允诺处于已解决状态不
    然后
    对承诺的调用将返回一个新的挂起承诺。这将仅在执行回调时解决(或拒绝)。
    promise.resolve()。然后(x=>x)/=>promise{:“挂起”}