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)
});