【JS小例】宏任务和微任务

文章详细解释了JavaScript中同步代码的执行顺序,强调了微任务(如Promise的.then())先于宏任务(setTimeout)执行的特点,并通过示例展示了async/await在异步函数中的运用。
摘要由CSDN通过智能技术生成

小试一下:

    console.log('同步代码1')
    setTimeout(() => {
        console.log('macro setTimeout')
    }, 0)
    new Promise((resolve) => {
      console.log('同步代码2 Promise')
      resolve()
    }).then(() => {
        console.log('micro then')
    })
    console.log('同步代码3')

运行后结果:

捋一下过程:

  • 执行同步代码console.log('同步代码1')
  • 执行同步代码console.log('同步代码2 Promise')
  • 执行同步代码console.log('同步代码3')
  • 执行微任务console.log('micro then')
  • 执行宏任务console.log('macro setTimeout')

可以看到微任务优先于宏任务执行。

在来个复杂一些的:


    async function fn1 () {
      console.log('fn1')
      await setTimeout(() => {
        console.log('fn1 setTimeout')
      }, 0);
      new Promise((resolve, reject) => {
          console.log('fn1 promise')
        resolve()
      }).then(res => {
        console.log('fn1 promise then')
      })

      fn2()
      fn3()
    }
    async function fn2 () {
      await setTimeout(() => {
        console.log('fn2 setTimeout')
        new Promise((resolve, reject) => {
          console.log('fn2 promise')
          resolve()
        }).then(res => {
          console.log('fn2 promise then')
        })
      }, 0);
    }
    async function fn3 () {
      await setTimeout(() => {
        console.log('fn3 setTimeout')
      }, 0);
    }

    console.log('main')

    fn1()

    new Promise((resolve, reject) => {
      console.log('main promise')
      resolve()
    }).then(res => {
      console.log('main promise then')
    })

    new Promise((resolve, reject) => {
      console.log('main promise 2')
      resolve()
    }).then(res => {
      console.log('main promise 2 then')
    })

运行结果是:

 

你答对了吗?

如发现文章内容有任何问题,请提出您的宝贵意见予以指正,感谢您的阅读。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值