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等

相关推荐
Ulyanov26 分钟前
用Pyglet打造AI数字猎人:从零开始的Python游戏开发与强化学习实践
开发语言·人工智能·python
独自归家的兔42 分钟前
OCPP 1.6 协议详解:StatusNotification 状态通知指令
开发语言·数据库·spring boot·物联网
希望永不加班1 小时前
Spring AOP 代理模式:CGLIB 与 JDK 动态代理区别
java·开发语言·后端·spring·代理模式
2301_799073021 小时前
基于 Next.js + 火山引擎 AI 的电商素材智能生成工具实战——字节跳动前端训练营成果
javascript·人工智能·火山引擎
RNEA ESIO1 小时前
PHP进阶-在Ubuntu上搭建LAMP环境教程
开发语言·ubuntu·php
23471021271 小时前
4.15 学习笔记
开发语言·软件测试·python
java1234_小锋2 小时前
Java高频面试题:什么是可重入锁?
java·开发语言
雾岛听蓝3 小时前
Qt操作指南:窗口组成与菜单栏
开发语言·经验分享·笔记·qt
zopple3 小时前
Laravel vs ThinkPHP:PHP框架终极对决
开发语言·php·laravel
松☆3 小时前
C++ 算法竞赛题解:P13569 [CCPC 2024 重庆站] osu!mania —— 浮点数精度陷阱与 `eps` 的深度解析
开发语言·c++·算法