js高阶-async与事件循环

async函数

与普通函数的区别

复制代码
1.可以正常调用
2.返回值是一个promise
3.抛出异常,不影响后续代码执行
js 复制代码
// 3.抛出异常,返回的Promise对象为rejected状态

async function foo(){

    throw new Error("我是错误");

}

foo().catch(err=>{

    console.log(err);

  }

)

console.log("可以继续执行");

await 关键字

await 后面跟promise对象,

会暂停async函数的执行,等待promise状态改变

事件循环

js是单线程的,同一时间只能做一件事情

当遇到耗时长操作当前线程就会被阻塞

于是,出现异步操作
异步操作交给浏览器其他线程来处理,

处理完后将异步任务放入事件队列

js引擎在调用栈为空的时候会检测事件队列,从中取任务执行

这个过程事件循环

宏任务与微任务

事件队列,分为宏任务队列与微任务队列
js会先检查微任务队列,执行完后,在检查宏任务队列

宏任务

setTimeOut,ajax,UI Rendering,Dom监听等
微任务

Promise的then回调,queueMicroTask,Mutation Api等

相关推荐
wjs202410 分钟前
Go 语言接口
开发语言
草莓熊Lotso18 分钟前
《告别 “会用不会讲”:C++ string 底层原理拆解 + 手撕实现,面试 / 开发都适用》
开发语言·c++·面试
水木流年追梦20 分钟前
【python因果库实战27】逆概率加权模型2
开发语言·python
「已注销」21 分钟前
面试分享:二本靠7轮面试成功拿下大厂P6
前端·javascript·面试
张槊哲39 分钟前
C++ 进阶指南:如何丝滑地理解与实践多线程与多进程
开发语言·c++·算法
walking95740 分钟前
重新学习前端之设计模式与架构
前端·javascript·面试
walking95743 分钟前
重新学习前端之TypeScript
前端·javascript·面试
雪度娃娃1 小时前
Effective Modern C++——型别推导
开发语言·c++
Hello eveybody1 小时前
介绍一下背包DP(C++)
开发语言·c++·动态规划·dp·背包dp
Run_Teenage2 小时前
Linux:线程互斥,线程锁
运维·开发语言·jvm