【无标题】

const p1 = new Promise(( resolve)=>{
    setTimeout(()=>{
        resolve("resolve3")
        console.log("timer")
    }, 0)
    resolve("resolve1")
    resolve("resolve2")
}).then((res)=>{
    console.log( res);
    setTimeout(()=>{
        console.log(p1)
    },  1000)
}).finally(( res )=>{
    console.log( "finally", res)
})

程序执行时,先遇到

 

放在宏任务队列,这个时候resovle1,promise的状态就为resovle1了,不再更改了,遇到then
放在微任务队列里面,finally要等then 执行后,他才执行,
执行栈为空,先从为任务队列取出then,打印出resolve1,遇到

 

这个,继续放在宏任务队列,这个时候,then执行完,没有显式的return,因此,默认返回undefined,这个时候又产生了finalyy这个微任务,继续执行微任务,因此打印出来 finally,undefined,这个时候执行栈又为空,从宏任务队列里面,取出第一个setTimeout,打印出timer,执行栈为空,再从宏任务队列里面取出第二个,这个时候,p1这个promise的状态已经时fulfilled的了,值时undefined

Promise.resolve().then(() => {
    console.log(1);
    Promise.resolve().then(() => {
        console.log(3)
    }).then(() => {
        console.log(4)
    });
}).then(() => {
    console.log(2)
});

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值