JS异步

本文深入解析了JavaScript的事件循环机制,包括宏任务与微任务的区别,Promise的状态转换及其在Promise.then()和.catch()中的作用。同时涵盖了async/await语法的使用,探讨了Promise与setTimeout的执行顺序以及async/await的执行流程。重点讲解了DOM事件与event loop的关系以及它们在异步编程中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

event loop
promise 进阶
async/await
微任务/宏任务
问答题:
请描述event loop(事件循环/事件轮询)的机制,可画图
什么是宏任务、微任务,两者有什么区别
Promise有哪三种状态,如何变化
场景题:
promise then和catch的连接(常考且实用)
async/await语法
promise和setTimeout的顺序(常考)
外加async/await的顺序问题(好题,综合深入)

1. event loop 

JS如何执行?
1.从前到后,一行一行执行
2.如果某一行执行报错,则停止下面代码的执行
3.先把同步代码执行完,再执行异步
event loop代码执行
1. 同步,一行一行放在call stack 中执行
2. 遇到异步,先“记录”下,等待时间(定时,网络请求等)
3. 时机到了,就移动到 calllback queue
4. 如果call stack 为空(即同步带吗执行完),event loop开始工作
5. 轮询查找callback queue,如有则移动到call stack 执行
6. 继续轮询查找(永动机一样)

DOM事件和 event loop 关系:
DOM事件是基于event loop实现的
1. JS 是单线程的
2. 异步(setTimeout,ajax等)使用回调,基于event loop
3. DOM事件也是用回调,基于event loop (DOM事件不是异步,只是回调先被保存起来,等待执行时,再去调用);

2. promise 有哪三种状态,是如何变化的, (三种状态,状态的表现和变化) 

pending --》 resolve  resolve 会触发then后面的回调

pending----》 reject   reject 会触发catch 后面的回调,

如果执行正确,则返回resolve ,如果执行错误,则返回reject

无论是then,还是catch,只要没有报错,都是返回的是resolve状态的promise, 如果报错,返回reject的promise

常见的三道面试题:

3. async 和await

async/await (async/await消灭异步回掉的终极武器,js还是单线程的,还是需要用异步的,还是基于eventLoop的); 
✦异步回调容易导致callback hell。
✦Promise then catch链式调用虽把层级铺开,但也是基于回调函数。
✦async/await能彻底消灭回调函数,用同步语法编写异步代码。async/await和promise并不冲突。
async-await代码执行过程详细分析
重点:await的后面,都可以看作是异步回调的内容。

先执行同步代码,同步代码执行完,执行异步代码, await后面的都相当于放入回调函数,是异步的。异步代码一层一层执行,本质也是回调

4. for in 和 for of 

for ... in 以及 forEach  for 是常规的同步遍历;
for... of 用于异步的遍历。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值