js异步之宏任务(marcroTask)和微任务(microTask)

首先我先给大家解释一下什么是宏任务和微任务

宏任务包括:setTimeout setInterval Ajax DOM事件(异步)
微任务:Promise async/await--阻塞的 异步方法 (同步)
微任务比宏任务的执行时间要早


 其次我还想让大家了解一下异步和单线程

异步和单线程是相辅相成的,(也就是说没有单线程,就不会出现异步这个概念)js是 一门单线程脚本语言,你不可能让每一个事件按顺序排好,执行完一个任务在进行下一个任务。也有点扯淡,所以需要异步来辅助

异步和同步的区别:

  • 异步不会阻塞程序的执行,
  • 同步会阻塞程序的执行,

说的通俗一点,同步任务就像在食堂的一号窗口买饭,你买完了,我买,我买完了下一个人买,

下一个人买完了,才可以一起吃,而异步任务就像是在123.三个窗口同时买饭,谁先买完谁吃


前端使用异步的场景:

  1. 定时任务:setTimeout,setInverval
  2. 网络请求:ajax请求,动态<img>加载(异步的概念我们了解了,所以说我们不可能等axios请求完成后或者图片加载完成后才让用户干别的事情,这太影响用户体验了)

那么同步和异步以及宏任务和微任务我们了解了,他们的执行顺序是怎样理解呢?

我总结了几点:

// 宏任务队列 1
setTimeout(() => {
  // 宏任务队列 2.1
  console.log('timer_1');
  setTimeout(() => {
    // 宏任务队列 3
    console.log('timer_3')
  }, 0)
  new Promise(resolve => {
    resolve()
    console.log('new promise')
  }).then(() => {
    // 微任务队列 1
    console.log('promise then')
  })
}, 0)
 
setTimeout(() => {
  // 宏任务队列 2.2
  console.log('timer_2')
}, 0)
console.log('========== Sync queue ==========')


第一步:先执行所有的同步任务(log)
第二步:执行完毕再去执行第一个宏任务(宏1)
第三步:执行第一个宏任务的时候,先看有没有需要执行的‘微任务’(promise),如果有,执行,没有就执行‘宏任务’(执行完第一批‘微任务’,此时去执行第二个宏任务)

第四步:宏2同上
大致就是这样一个流程,大家记住一句话就行‘有微则微,无微则宏’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值