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{:“挂起”}