位置: IT常识 - 正文

EventLoop(event loop exception null)

编辑:rootadmin
🍀EventLoop JS是单线程的,也就是,同一时间只能做一件事情。所以一旦遇到大量任务或者耗时的任务时,比如加载高清图片,网页就会“假死”,无法响应用户的行为。为了防止这种阻塞,才有了同步和异步的概念。而EventLoop,即事件循环机制,就是我们经常使用异步的原理。 同步任务 非耗时的任务, ... ?EventLoop

推荐整理分享EventLoop(event loop exception null),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:event loop exception,event loop 详解,event loop原理简述,并通过伪代码举例,event loop shut down,event loop shut down,event loop 详解,浏览器eventloop,event loop原理简述,并通过伪代码举例,内容如对您有帮助,希望把文章链接给更多的朋友!

JS是单线程的,也就是,同一时间只能做一件事情。所以一旦遇到大量任务或者耗时的任务时,比如加载高清图片,网页就会“假死”,无法响应用户的行为。为了防止这种阻塞,才有了同步和异步的概念。而EventLoop,即事件循环机制,就是我们经常使用异步的原理。

同步任务非耗时的任务,指的是在主线程上排队执行的那些任务只有前一个任务执行完毕,才能执行后一个任务console.log('111')console.log('222')console.log('333')

上述就是简单的同步任务,会按照顺序输出111,222,333

异步任务耗时任务,异步任务由JS委托给宿主环境进行执行当异步任务执行完之后,会通知JS主线程执行异步任务的回调函数

比如说发一个网络请求,主程序需要等到接收到数据后再去做其他的事情。当异步完成后,可能程序正在做其他的事情,所以即使异步完成了也需要在一旁等待,等到程序空闲下来才有时间继续执行。

异步任务分为宏任务和微任务。

为了防止一个函数执行时间过长阻塞后面的代码:

会先将同步代码压入执行栈中,在主线程上依次执行;将异步代码推入任务队列,任务队列又分为宏任务队列和微任务队列;因为宏任务队列的执行时间较长,所以微任务队列要优先于宏任务队列。如果执行栈中的所有同步任务执行完毕,就会读取任务队列,将可运行的异步任务添加到执行栈中,开始执行。宏任务

每次执行栈执行的代码就是一个宏任务(包括每次从事件队列中获取一个事件回调并放到执行栈中执行)

浏览器为了能够使得JS内部宏任务与DOM任务能够有序的执行,会在一个宏任务执行结束后,在下一个宏任务执行开始前,对页面进行重新渲染。所以宏任务执行是在DOM渲染之后。

宏任务包括:

异步Ajax请求setTimeout、setIntervalpostMessage文件操作微任务EventLoop(event loop exception null)

微任务就是在当前任务结束之后立即执行的任务。微任务在渲染之前执行,所以它的响应速度相比宏任务会更快,因为无需等渲染。

微任务包括:

Promise.then、.catch、.finallyprocess.nextTick

运行机制先执行主线程中的同步任务遇到异步宏任务,就将其放入宏任务队列中遇到异步微任务,就将其放入微任务队列中主线程任务执行完后,从微任务队列中取出任务到主线程中,直到微任务队列为空。在这个过程中,如果遇到微任务中又有微任务,会将其依次放入微任务队列中微任务执行完毕后,从宏任务队列中取出任务到主线程中。在一个宏任务的执行过程中,如果遇到微任务,就会将其放入到微任务队列中。每一个宏任务执行完之后,都会检查是否存在正在等待执行的微任务,如果有就会先将所有微任务执行完,再执行下一个宏任务。

根据上述的解释,先来判断一下这段代码的输出结果

setTimeout(function(){console.log('1')})new Promise(function(resolve){console.log('2')resolve()}).then(function(){console.log('3')})console.log('4')

正确的输出结果是:2431

执行的过程:

①先执行所有的同步任务(第5行、第10行)

②再执行微任务(第8行,promise.then是微任务)

③在执行下一个宏任务(第2行,setTimeout是宏任务)

再看一个复杂的例子

console.log('1');setTimeout(() => {console.log('2');new Promise(function(resolve) {console.log('3')resolve()}).then(function() {console.log('4')})})new Promise(function(resolve) {console.log('5')resolve()}).then(function() {console.log('6')})setTimeout(() => {console.log('7')new Promise(function(resolve) {console.log('8')resolve()}).then(function() {console.log('9')})})

输出的结果为:156234789

需要注意的点就是执行完每个宏任务,都会把微任务队列中的执行完,才能再执行下一个宏任务

本文链接地址:https://www.jiuchutong.com/zhishi/313371.html 转载请保留说明!

上一篇:免费下载海洋CMS高防7kb影视网站模板-OK源码(海洋cms有安卓版下载)

下一篇:discuz设置问题:如何设置附件售价的最高值?(discuz设置门户)

  • iphonexr可以录屏幕视频吗(iphonexr录屏可以把声音录进去吗)

    iphonexr可以录屏幕视频吗(iphonexr录屏可以把声音录进去吗)

  • 华为nova4e是几英寸手机(华为nova4是几英寸)

    华为nova4e是几英寸手机(华为nova4是几英寸)

  • realme手机是什么牌子(realme手机官网)

    realme手机是什么牌子(realme手机官网)

  • vivoy5s呼吸灯怎么设置(vivox50呼吸灯)

    vivoy5s呼吸灯怎么设置(vivox50呼吸灯)

  • 爱奇艺连续包月怎么取消自动续费(爱奇艺连续包月是什么意思)

    爱奇艺连续包月怎么取消自动续费(爱奇艺连续包月是什么意思)

  • 淘宝单排搜索怎么设置(淘宝搜索页面单排和双排怎么弄)

    淘宝单排搜索怎么设置(淘宝搜索页面单排和双排怎么弄)

  • 想知道抖音是不是被对方拉黑了怎么办(想知道抖音是不是真的)

    想知道抖音是不是被对方拉黑了怎么办(想知道抖音是不是真的)

  • 拼多多退货商家不处理怎么办(拼多多退货商家拒收快递会怎么样)

    拼多多退货商家不处理怎么办(拼多多退货商家拒收快递会怎么样)

  • 知乎文字不能复制吗(知乎不能粘贴文字)

    知乎文字不能复制吗(知乎不能粘贴文字)

  • ipadmini与微信不兼容(ipad与微信不兼容的解决办法)

    ipadmini与微信不兼容(ipad与微信不兼容的解决办法)

  • 硬盘换到别的电脑上能直接用吗(硬盘换到别的电脑上文件丢失)

    硬盘换到别的电脑上能直接用吗(硬盘换到别的电脑上文件丢失)

  • 8个字节含二进制的个数是(8字节含二进制位数)

    8个字节含二进制的个数是(8字节含二进制位数)

  • 抖音数据中心在哪(抖音第三方数据平台)

    抖音数据中心在哪(抖音第三方数据平台)

  • mv7n2ch/a是几代的耳机(mv7n2ch/a是国行吗)

    mv7n2ch/a是几代的耳机(mv7n2ch/a是国行吗)

  • 手机怎么把照片背景变白(手机怎么把照片缩小到200k)

    手机怎么把照片背景变白(手机怎么把照片缩小到200k)

  • word的邮件选项在哪(word邮件选项卡包括)

    word的邮件选项在哪(word邮件选项卡包括)

  • 荣耀v20怎样关闭后台(荣耀v20怎样关闭系统自动更新功能)

    荣耀v20怎样关闭后台(荣耀v20怎样关闭系统自动更新功能)

  • vivo系统相册在哪里找(vivo手机系统相册)

    vivo系统相册在哪里找(vivo手机系统相册)

  • 买家怎么查看自己的退货率(买家怎么查看自己拼多多退货率)

    买家怎么查看自己的退货率(买家怎么查看自己拼多多退货率)

  • 微信etc安装激活后就可以用了吗(微信etc安装后怎么激活)

    微信etc安装激活后就可以用了吗(微信etc安装后怎么激活)

  • a1691是什么版本(A1691是什么版本)

    a1691是什么版本(A1691是什么版本)

  • wps全选在哪(wps怎么全选)

    wps全选在哪(wps怎么全选)

  • 海尔Haier笔记本电脑开机进入BIOS的方法(F2)(海尔笔记本最新款)

    海尔Haier笔记本电脑开机进入BIOS的方法(F2)(海尔笔记本最新款)

  • bg命令  将作业放到后台运行

    bg命令 将作业放到后台运行

  • 织梦自定义PHP页面让模板支持调用标签(织梦怎么新建页面)

    织梦自定义PHP页面让模板支持调用标签(织梦怎么新建页面)

  • 支付给境外个人的租金
  • 一般纳税人附加税优惠政策2023
  • 工程款税率是多少专票
  • 承兑汇票用开发票吗
  • 出口不退税进项税如何处理
  • 公司收据收款人怎么写
  • 什么时候库存商品什么时候主营业务收入
  • 某公司是一家刚成立的大型化妆品生产企业
  • 工资核算方式
  • 上一年度多计提折旧怎么调整
  • 销售库存商品计入什么科目
  • 装修费可以一次性计入费用吗
  • 固定资产报废残料收入的账务处理
  • 已抵扣的进项税发票开具红字发票信息表
  • 技术转让税收优惠政策500万
  • 净利润亏损怎么结转
  • 固定资产管理的三大原则
  • 货物返利怎么做分录
  • 购买固定资产的税率是多少
  • 可转换债券存在的问题
  • 民办非企业单位属于什么类型
  • 信息技术服务在开票系统怎么选
  • 应收账款应计利息公式如何理解
  • 抄报不了是怎么回事?
  • 商品退回顺丰代收怎么办
  • 小规模纳税人发生销售退回如何申报
  • 华为手机屏幕变成黑白怎么调回来
  • 退留抵税额会计分录
  • macos 关闭屏幕
  • 付给银行的手续费分录
  • 事业单位负债类科目包括哪些科目
  • 收到无偿划拨的股权如何入账
  • 电脑记事本在哪里打开
  • paddle!
  • 公众号 隐藏文章
  • 融资租入资产的入账价值可能是()
  • 分批付款怎么确认收入
  • vue中el-dialog
  • php做网页
  • 哪个光圈值最大
  • thinkphp项目怎么运行
  • 领用包装物会计处理
  • 股份有限公司都是私企吗
  • css3栅格布局
  • 前端手撕代码
  • 遮天传官网
  • 房租发票需要写备注吗
  • 注销的公司需要清算吗
  • 生产费用在完工产品和在产品之间的方法
  • 专用红字发票如何开具
  • 理财中的资产是什么意思
  • 临时工工资无发票个税怎么申报
  • 旅行社差额征收怎么报税
  • 机械租赁公司需要什么证件
  • 转销无法收回的应收账款会计分录
  • 增加的实收资本印花税
  • 小规模购入固定资产怎么做账
  • 票据利率定价调整方案
  • 企业申请支付宝账号步骤
  • 什么是当期损益和其他综合收益
  • sql语句中截取字符串
  • mysql 5.7.13 winx64安装配置方法图文教程(win10)
  • 开机无法进入桌面,无法调用资源管理器
  • 用Win7系统的Syskey命令来设置系统的启动密码
  • windows2008 iis安装
  • windows7如何安装net framework4.0
  • win8怎么恢复出厂设置找不到恢复环境
  • win10商店没有图标
  • shell脚本转换文件编码
  • IE6支持position:fixed完美解决方法
  • linux命令sed的用法
  • mkdirs linux
  • 查看shell脚本是否在运行
  • javascript基于什么的语言
  • 力所能及之处,定当竭尽所能
  • 拟录用人员公示后还会递补吗
  • 长沙税务网站查询系统
  • 江苏差旅费报销管理规定2021
  • 江苏省镇江市街道名称
  • 个人所得税税前扣除是什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设