一天时间迅速准备前端面试|JavaScript——异步进阶
创始人
2024-06-02 15:37:58
0

🌈本系列文章是博主精心整理的面试热点问题,吸收了大量的技术博客与面试文章,总结多年的面试经历,带你快速建立前端面试知识体系。抓住每一场面试的机会,知己知彼才能百战百胜!

  • 上期回顾 JS基础–异步
  • 本系列订阅 一天时间迅速准备前端面试(高薪精品)–欢迎订阅

文章目录

  • 本期介绍
  • 主要内容
  • 关键字
    • 什么是event loop?
    • event loop 执行过程
      • 图示
    • Promise有哪三种状态
      • 状态的表现
    • Promise的then和catch如何影响状态的变化
    • async/await介绍
    • 什么是宏任务和微任务
      • 宏任务
      • 微任务


本期介绍

JS 的特色就是异步编程,所有有很多关于异步的考点,本章都会讲解。如 event loop、promise、async-await、微任务和宏任务。学不会这些,就不算是精通 JS。

主要内容

  • event loop 执行过程
  • Promise 全面使用
  • async await 全面使用
  • 微任务和宏任务

关键字

  • Promise
  • async await
  • event loop
  • 微任务和宏任务

什么是event loop?

event loop,也叫事件循环/事件轮询,JS是单线程运行的,从前到后,一行一行执行,如果某一行执行报错,则停止下面的代码执行,先把同步代码执行完,再执行异步,异步要基于回调来实现,event loop 就是异步回调的实现原理。

event loop 执行过程

  1. 同步代码,一行一行放在 Call Stack 执行

  2. 遇到异步,会先“记录”下,等待时机(定时,网络请求等)

  3. 时机到了,就会移动到 Callback Queue

  4. 如果 Call Stack 为空(即异步代码执行完)Event loop 开始工作

  5. 轮训查找 Callback Queue,如有则移动到 Call Stack 执行

  6. 然后继续轮询查找(永动机一样)

图示

在这里插入图片描述
图示代码执行过程:

  1. 将 console.log(“Hi”) 推入调用栈,调用栈会执行代码
  2. 执行代码,控制台打印“Hi”,调用栈清空
  3. 执行 setTimeout,setTimeout由浏览器定义,不是ES6的内容;将定时器放到Web APIs中,到时间后将回调函数放到回调函数队列中
  4. 执行完了setTimeout, 清空调用栈
  5. console.log(“Bye”)进入调用栈,执行,调用栈清空
  6. 同步代码被执行完,,回调栈空,浏览器内核启动时间循环机制
  7. 五秒之后,定时器将cb1推到回调函数队列中
  8. 事件循环将cb1放入调用栈

Promise有哪三种状态

promise 有三种状态,分别是:pending(初始化状态)、resolved(成功状态)、rejected(失败状态)

pending ->resolvedpending->rejected

变化不可逆

状态的表现

pending状态,不会触发then和catch

resolved状态,会触发后续的then回调函数

rejected状态,会触发后续的catch回调函数

reslove只会触发then的回调,不会触发catch

reject只会触发catch的回调,不会触发then

Promise的then和catch如何影响状态的变化

then正常返回resolved,里面有报错则返回rejected

catch正常返回resolved,里面有报错则返回rejected

在这里插入图片描述
在这里插入图片描述

async/await介绍

解决异步回调callback hell(回调地狱),Promise then catch 链式调用,但也是基于回调函数,async/await是用同步语法编写异步代码,是同步语法,彻底消灭回调函数,是异步写法的最佳解决方式,是消灭异步回调的终极武器。
注意:async/await和promise不冲突。
await相当于Promise的then
try…catch可捕获日常,代替了Promise的catch

写法一:

!(async function(){//同步的语法const img1 = await loadImg(src1)//await 必须用async函数包裹cosole.log(img1.height,img.width)const img2 = await loadImg(src2)cosnole.log(img.height,img2.width)}) ( )

写法二:

async function loadImg1() {const img1 = await loadImg(src1)return img1)

什么是宏任务和微任务

宏任务和微任务是event Loop中的两种任务,分别处在两种任务队列中。微任务是ES6语法规定的,宏任务是浏览器规定的。

宏任务

setTimeout,setInterval, Ajax, DOM事件;

微任务

Promise async/await

微任务执行时机比宏任务要早

相关内容

热门资讯

万众创新的含义,大众创业 万众... 2017年7月27日,国务院发布《国务院关于强化实施创新驱动发展战略进一步推进大众创业万众创新深入发...
再谈创业者的价值观(创业的价值... 微信官方账号:第一品牌官无论任何时候,我们都在为中国制造业发出品牌声音!01企业家价值观三十年前就有...
未来的创业趋势是什么,创业失败... 这是我们坚信多年的铁律。如果只看注册公司的统计,创业成功率可能真的只有10%,甚至更低。统计显示,8...
第一次创业开什么店好,怎样开公... 在目前的市场环境下,对于一个刚创业的人来说,项目的选择真的很重要,稍有疏忽就很容易导致创业失败。那么...
企业孵化器,创业加速器是什么意... 创业加速器是一种通过教育引导和提供资金等手段来加速初创企业发展的新型创业模式。它只有很短的历史,但这...
借力REITs“东风” 房企谋... 6月27日,中金中国绿发商业资产REIT上市首日开盘涨幅达30%,触及涨停。这是今年以来消费基础设施...
市委全面深化改革委员会召开第十...   本报讯(记者 祁梦竹 范俊生)昨天下午,市委全面深化改革委员会召开第十五次会议,审议《北京市宏观...
人工智能创业项目,数字创业 人... 随着AI行业的快速发展,数据标注行业无疑是一个十亿美元的市场,数据相当于人工智能算法的“燃料”。作为...
大学生创业新颖的点子,创业意识... 关于孩子在业余时间能否赚到零花钱,有两种声音。一个声音认为,孩子的任务是专心学习,赚钱是大人的事,不...
大学生创业计划书怎么写(计算机... 随着网络经济和电子商务的快速发展,网上创业已经成为广州大学生自主创业的重要途径。接下来,请享受学习。...