async与await\宏任务和微任务

  async function async1() {
    console.log("async1 start");
    await async2();
    console.log("async1 end");
    setTimeout(() => {
      console.log("timer1");
    }, 0);
  }

  async function async2() {
    setTimeout(() => {
      console.log("timer2");
    }, 0);
    console.log("async2");
  }

  async1();

  setTimeout(() => {
    console.log("timer3");
  }, 0);

  console.log("start");
  // async1 start => async2 => start => async1 end => timer2 => timer3 => timer1

// 首先运行async1函数,打印【async1 start】,然后遇上await async2()同时函数内await后的内容进入微队列,执行async2(),async2中计时器timer2进入宏队列,打印【async2】,之后跳出async1函数,执行外部同步函数,timer3进入宏队列,打印【start】,此时微队列中是async1中await async2之后的内容,所以打印【async1 end】,timer1进入宏队列,微队列内容执行完毕之后开始执行宏队列内容,从头开始分别打印【timer2、timer3、timer1】

//所以打印顺序[async1 start]\[async2]\[start]\[async1 end]\[timer2、timer3、timer1]

宏任务和微任务的定义

宏任务是由宿主环境(如浏览器或Node.js)发起的任务,它们通常包括一些IO操作、定时器事件(如setTimeoutsetInterval)、UI渲染等。宏任务会在每一轮事件循环的开始被处理。

微任务则是由JavaScript引擎内部发起的任务,它们通常是在当前执行栈中的任务执行完毕后立即执行。微任务的例子包括Promise的回调、MutationObserver的回调等。微任务的执行时机早于宏任务,它们会在当前执行栈为空后,下一个宏任务执行前被处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值