位置: 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设置门户)

  • 怎样查出qq匿名提问是谁发的(怎样查出qq匿名提问)

    怎样查出qq匿名提问是谁发的(怎样查出qq匿名提问)

  • 情侣空间网络繁忙(情侣空间系统繁忙截图)

    情侣空间网络繁忙(情侣空间系统繁忙截图)

  • oppo经常接不到电话(oppo接不到短信是怎么回事)

    oppo经常接不到电话(oppo接不到短信是怎么回事)

  • word中将文字转成表格怎么弄(word中将文字转化为ppt)

    word中将文字转成表格怎么弄(word中将文字转化为ppt)

  • 微信退群有显示吗(微信退了群以前的聊天记录还在吗)

    微信退群有显示吗(微信退了群以前的聊天记录还在吗)

  • 钉钉小窗口播放可以看视频吗(钉钉小窗口播放算不算时间)

    钉钉小窗口播放可以看视频吗(钉钉小窗口播放算不算时间)

  • 键盘上句号是哪一个键(键盘上的句号是哪个键)

    键盘上句号是哪一个键(键盘上的句号是哪个键)

  • 安装应用显示未安装(安装应用显示未安装是啥原因)

    安装应用显示未安装(安装应用显示未安装是啥原因)

  • scms-t需要开启吗(scmst)

    scms-t需要开启吗(scmst)

  • 怎么取消主题(怎么取消主题会员自动续费)

    怎么取消主题(怎么取消主题会员自动续费)

  • a1709是ipad什么型号(ipada1709是几代)

    a1709是ipad什么型号(ipada1709是几代)

  • 英特尔处理器后面的字母代表什么意思(英特尔处理器后缀p)

    英特尔处理器后面的字母代表什么意思(英特尔处理器后缀p)

  • 淘宝怎么设置农村淘宝(淘宝怎么设置农村淘宝代收)

    淘宝怎么设置农村淘宝(淘宝怎么设置农村淘宝代收)

  • word批量调整图片尺寸(word批量调整图片大小)

    word批量调整图片尺寸(word批量调整图片大小)

  • ipad 设定屏幕常亮(ipad在哪里设置屏幕持续亮时间)

    ipad 设定屏幕常亮(ipad在哪里设置屏幕持续亮时间)

  • 淘宝界面怎么不一样了(手机淘宝怎么不在桌面)

    淘宝界面怎么不一样了(手机淘宝怎么不在桌面)

  • 电脑照片怎么导到手机上(电脑照片怎么导入u盘)

    电脑照片怎么导到手机上(电脑照片怎么导入u盘)

  • 网易云怎么关闭心动模式(网易云怎么关闭在线状态)

    网易云怎么关闭心动模式(网易云怎么关闭在线状态)

  • 苹果xr连接电脑没反应(苹果xr连接电脑没反应只能充电)

    苹果xr连接电脑没反应(苹果xr连接电脑没反应只能充电)

  • 热点资讯在哪里关闭(热点资讯在哪里找)

    热点资讯在哪里关闭(热点资讯在哪里找)

  • 滴滴车龄超过8年怎么办(滴滴车龄超过8年可以延期吗)

    滴滴车龄超过8年怎么办(滴滴车龄超过8年可以延期吗)

  • 荣耀20电池容量(荣耀20电池容量多少毫安)

    荣耀20电池容量(荣耀20电池容量多少毫安)

  • 苹果地图怎么设置语音(苹果地图怎么设置粤语)

    苹果地图怎么设置语音(苹果地图怎么设置粤语)

  • 小狐狸ChatGPT付费创作系统1.6.8独立开源版 + 公众号H5+小程序+VUE源码安装配置详细教程(小狐狸吧)

    小狐狸ChatGPT付费创作系统1.6.8独立开源版 + 公众号H5+小程序+VUE源码安装配置详细教程(小狐狸吧)

  • 跨月的增值税普票作废步骤
  • 房产租赁增值税率是5%还是9%
  • 出口退税账务处理
  • 个人所得税减免 租房没有合同编号
  • 装修收入如何填报增值税表
  • 8000块电脑大概能跑多少分
  • 新税法讲课费如何代缴个税
  • 收到补助款怎么入账
  • 税费漏报
  • 个体工商户税收怎么算
  • 小型微利企业如何计算所得税
  • 企业向个人借款需要交印花税吗
  • 官司赔偿费用需要发票吗
  • 所得税不能税前扣除项目
  • 学校的房子归哪里管
  • 工资计税基数
  • 出售报废电脑要交什么税
  • 一般公司报销一个月报销几次
  • 研发支出的台账由谁做
  • 抵扣联和发票联算一张发票吗
  • 转账支票用途可以写劳务费吗
  • 怎么进行现金流量分析
  • linux help
  • 制造费用明细科目有哪些
  • php快递查询系统
  • 程序员编程代码大全
  • 合作社实际没有自产自销,但税务方面怎么可以提供证明
  • 注销公司如何注销
  • php数组函数,选班长
  • 进程aissca.exe
  • win7家庭组怎么用
  • 最小的洗衣机是多少
  • 收到税务局退增值税及附加税怎么做账
  • 一次摊销法计算公式
  • 没有发票怎么做研发费用
  • 大数据可视化前端界面模板
  • 收费公路通行费补费平台 APP
  • 代开开增值税专票和自己开有什么区别
  • 有什么办法解决前进中的问题
  • 蓝色龙舌兰花语
  • easyui表格分页
  • 企业法人歇业后诉讼主体确认
  • 小企业会计准则 存货
  • 小规模纳税人开农产品免税发票
  • 分公司增值税可以放总公司一起缴纳吗
  • 公司帐户到银行怎么取钱
  • java方法的返回值类型有哪些
  • python默认画布大小
  • 富文本功能
  • 金税四期对建筑企业的影响
  • 如何根据销售额的降序计算销售排名
  • 企业承担残疾比例是多少
  • 小规模公司的做账要求
  • 外币账户的设置在哪里
  • 营业外收入交企业所得税吗
  • 固定资产3%减按2%征收增值税申报表如何填写
  • 商贸公司用什么软件好
  • 出口退税没有及时申报
  • 母公司为子公司承担税费
  • 开票加的税点走什么费用
  • 定期存款到期转存利息也转存吗
  • 财务软件摊销年限的最新规定
  • linux系统垃圾怎么清理
  • mac怎么切换输入法
  • xp系统与win7系统的电脑怎么组成局域网
  • linux 判断语句
  • win7文件访问被拒绝怎么办
  • js布尔类型用法
  • perl pop push shift unshift实例介绍
  • jsonp实现动态加载文件
  • pip工具安装
  • 有关中秋节的古诗
  • linux shell脚本命令
  • unity3d特效教程
  • unity-chan
  • jquery编写Tab选项卡滚动导航切换特效
  • 请领导批示的格式
  • 小规模纳税人销售额怎么算
  • 天猫主体变更是什么意思
  • 电子发票查询官方
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设