宏任务与微任务执行顺序试题(1)

上码:

setTimeout(()=>{
    console.log('A')
})

new Promise((resolve)=>{
    console.log('B')
    resolve()
}).then(()=>{
    console.log('C')
})

console.log('D')

执行顺序:

在这里插入图片描述

分类:

宏任务:
1.异步Ajax请求
2.setTimeout、setInterval
3.文件操作
4.其他宏任务
微任务:
1.promise.then、promise.catch、promise.finally
2.process.nextTick
3.其他微任务

分析:

首先要明白的一点是,promise实例本身是同步的,只不过其then和catch为
异步(微任务),所以执行代码时首先遇到setTimeout,则将其放入宏任务队列,然后往下执行,遇到同步代码promise,则执行输出B,接着遇到then,则将其放入微任务队列,最后执行同步代码输出D,同步代码都执行完后就开始执行异步任务,异步任务则先执行宏任务,而执行宏任务前必须保证微任务队列为空,则先执行then中的微任务,则输出C,微任务队列为空后开始执行宏任务代码,即输出A。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值