同步,异步执行的案例解析

同步,异步执行的案例解析

JavaScript为单线程,先处理同步再处理任务队列的任务,任务队列又分为宏任务队列和微任务队列,优先级微任务队列高于宏任务队列

console.log('1');   //第一位=》直接输出1

setTimeout(() => {//定时器,异步函数,先存放宏任务队列
    console.log('2');第五位=》宏任务队列开始,输出2
    process.nextTick(() => {
        console.log('3');第七位=》直接输出3
    })
    new Promise((resolve) => {
        console.log('4');第六位=》同步输出4
        resolve();
    }).then(() => {
        console.log('5')第八位=》直接输出5
    })
})
process.nextTick(() => {//异步,存放微任务队列
    console.log('6');第三位,先处理微任务队列,打印6
})
new Promise((resolve) => {//Promise为同步函数,直接打印7
    console.log('7');//第二位=》直接输出7
    resolve();
}).then(() => {//promise.then为异步,存放微任务队列
    console.log('8');第四位=》直接输出1,微任务队列按顺序,打印8
})

setTimeout(() => {//定时器,异步函数,先存放宏任务队列
    console.log('9');//第九位=》直接输出9
    process.nextTick(() => {
        console.log('10');//第十二位=》直接输出10
    })
    new Promise((resolve) => {
        console.log('11');//第十位=》直接输出11
        resolve();
        console.log('12');//第十一位=》直接输出12
    }).then(() => {
        console.log('13')//第十三位=》直接输出13
    })
})
控制台输出结果:1 7 6 8 2 4 3 5 9 11 12 10 13
事件循环,第一次循环输出1 7 6 8,第二次循环输出2 4 3 5,第三次循环输出9 11 12 10 13
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值