JavaScript宏队列微队列以及事件轮回

javascript在执行时,遇到异步执行的方法,不会等异步方法返回结果再继续向下执行,而是先将异步方法放到一个队列中,然后继续执行,最后主线程空闲时,再按照顺序执行队列里的异步方法,叫做事件轮回。队列又分为宏队列和微队列,将宏任务放在宏队列,微任务放在微队列,在执行时遵循先全局方法,后微任务,最后宏任务的顺序。
宏任务:setTimeout, setInterval, setImmediate, I/O, UI rendering.
微任务:process.nextTick, Promise.then, Object.observer, MutationObserver.

    console.log('1->全局队列script');
    setTimeout(() => {
          console.log('2->timeout1');
          new Promise(resolve=>{
              console.log('3->timeout1-promise');
              resolve()
          }).then(()=>{
              console.log('4-timeout1-then');
          })
      }, 2000);
   
    new Promise(resolve=>{
        console.log('5->promise1');
        resolve()
    }).then(()=>{
        console.log('6->then=>1')
    })

结果为:
1->全局队列script
5->promise1
6->then=>1
2->timeout1
3->timeout1-promise
4-timeout1-then

先执行1全局队列,将settimeout内的放到宏队列中,执行5全局队列,将then中的6放到微队列中,主程序空闲,执行微任务6,然后执行宏任务settimeout(先执行2,3,将4放入微任务中,2,3执行完后执行4)

setImmediate类似于setTimeout(()=>{},0),执行先后不同场景下不同,在文件I/O和网络I/O中,setImmediate会先于setTimeout,在其他一般情况下,setTimeout会先于setImmediate。
script(主程序代码)——>process.nextTick——>promise——>setTimeout——>setImmediate

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值