微任务顺序和课程里面不一样?
来源:8-17 解答JS异步的面试题

薄樱猫猫
2022-03-03
就是这个题目,课程里讲的,先执行‘async1 end’,再执行’promise2’。但我这边执行全部代码后,先执行了’promise2’,再执行‘async1 end’。我确定没写错代码。所以这是为啥?
async function async1 () {
console.log('async1 start')
await async2()
console.log('async1 end')
}
async function async2 () {
console.log('async2')
}
console.log('script start')
setTimeout(function () {
console.log('setTimeout')
}, 0)
async1()
new Promise (function (resolve) {
console.log('promise1')
resolve()
}).then (function () {
console.log('promise2')
})
console.log('script end')
写回答
2回答
-
可能和你的浏览器版本有关,我最近也在学,读了一篇文章,最新的chrome对async/await进行了优化。
即对await 的下一行代码,等同于下面一行
return RESOLVE(p).then(()=>{ ```await```以下的代码 })
而代码中的『RESOLVE(p)』接近于『Promise.resolve(p)』,不过有微妙而重要的区别:p 如果本身已经是 Promise 实例,Promise.resolve 会直接返回 p 而不是产生一个新 promise。
具体可以看这个链接
https://www.zhihu.com/question/268007969
012022-03-04 -
双越
2022-03-03
我不知道你那儿为啥是这个顺序。
我把你的代码拷贝,执行,顺序是这样的,如下图:
112022-03-04
相似问题