一天时间迅速准备前端面试|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

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

相关内容

热门资讯

浙江官宣:蒋移祥被查 转自:上观新闻浙江省纪委省监委网站5月17日消息,浙江省盐业集团有限公司原党委书记、董事长蒋移祥涉嫌...
多地强化政策支持 外贸产品转内... 转自:中国发展网外贸产品转内销提速增量记者 杨阳腾 刘 畅 杨开新 王金虎为应对当前复杂多变的国际形...
仙乐健康:公司产品涉及NAD+... 投资者提问:董秘您好!请问公司有麦角硫因及其原料、中间体、产成品或应用吗?如有,是什么产品?有什么用...
广西县级及以上城市有望2027... 中新网南宁5月18日电(涂丽莎)2025年世界电信和信息社会日大会暨《广西“万兆启航 智赋八桂”高质...
京东买药618大促升级:每下一... 日前,京东宣布,又好又便宜的京东618将于5月底正式开启,消费者将享受延续一夏的极致低价和惊喜狂欢。...
看到宇宙更能看到人 ◆朱 光 一位上海音乐人对错过日前在梅赛德斯-奔驰文化中心上演的汉斯·季默电影音乐会现场懊恼...
上海市民排队“扫货”热情高涨 随着申城气温的节节攀高,购物热情也在本周末爆发。5月17日—18日,新世界大丸百货十周年店庆启动,截...
重构青年与电影的时空契约 “轻... 中新网盐城5月18日电(谷华)当电影与青春碰撞,当艺术与城市交融,一座城正用“轻舟计划”重构青年与电...
王永利:金融科技发展需解决重复...   5月18日金融一线消息,以“共享未来:构建开放包容的经济与金融体系”为主题的2025清华五道口全...
更大力度“引长钱”!上交所,最... 上交所近日举办商业银行理财公司权益类资金入市专题培训。证券时报记者获悉,此次培训旨在构建“长钱长投”...
最新!墨海军帆船撞上纽约布鲁克... 每经编辑|毕陆名 据CCTV国际时讯18日援引美国媒体报道,当地时间5月17日晚撞...
注意啦!武警制服不能这样穿! 新修订的共同条令对军队人员着装的时机场合与标准要求进行了系统规范前期我们已经为大家整理了一份武警常用...
沪上博物馆成入境游“第一站中的... 今天是国际博物馆日,上海文化遗产季同时启幕。上海,正在努力成为“中国入境游第一站”;而沪上博物馆,正...
新疆能源双城共振 清洁电力“闪... 转自:中国发展网中新社克拉玛依5月18日电 题:新疆能源双城共振 清洁电力“闪送”全国中新社记者 关...
中国外贸企业订单“暴涨” 美国... 转自:央视网央视网消息:随着中美互降关税,广东佛山的不少外贸企业也迅速重启美国市场供应,这几天,他们...
大佬集体加仓中国资产!巴菲特、... 美股机构投资者一季度持仓数据披露完毕,大佬们不约而同的加仓中国资产,减持美股!高瓴旗下HHLR Ad...
北邮2025招生新政:志愿“6... 中国青年报客户端讯(中青报·中青网记者 张茜)5月17日,在 “世界电信日”当天,由北京教育考试院、...
执行规范化改革,让胜诉权益“零... 执行规范化改革,让胜诉权益“零延迟”——访河北省高级人民法院党组书记、院长黄明耀图为4月21日,河北...
仙乐健康:美国子公司Best ... 投资者提问:公司有麦角硫因相关技术或产品么?公司美国子公司BestFormulations具备制造N...