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

  • 抖币可以买抖音里的商品吗(抖币可以买东西吗)

    抖币可以买抖音里的商品吗(抖币可以买东西吗)

  • 蚂蚁庄园一只羽毛球上有几根羽毛(蚂蚁庄园一匹)

    蚂蚁庄园一只羽毛球上有几根羽毛(蚂蚁庄园一匹)

  • iphonex序列号G0开头(苹果x序列号g0开头好吗)

    iphonex序列号G0开头(苹果x序列号g0开头好吗)

  • 货拉拉没人接单怎么办(货拉拉没人接单怎么联系司机)

    货拉拉没人接单怎么办(货拉拉没人接单怎么联系司机)

  • 微信7.0.14有什么新功能(微信7.014版本有什么功能)

    微信7.0.14有什么新功能(微信7.014版本有什么功能)

  • 腾讯课堂游客状态是怎么回事(腾讯课堂游客状态异常)

    腾讯课堂游客状态是怎么回事(腾讯课堂游客状态异常)

  • word里的文字怎样完全删除(word里的文字怎么转到excel)

    word里的文字怎样完全删除(word里的文字怎么转到excel)

  • 苹果微信视频没有声音(苹果微信视频没有声音是怎么回事)

    苹果微信视频没有声音(苹果微信视频没有声音是怎么回事)

  • 苹果手机提醒事项里面列表内容怎么没有了(苹果手机提醒事项怎么关闭)

    苹果手机提醒事项里面列表内容怎么没有了(苹果手机提醒事项怎么关闭)

  • 多媒体压缩分为哪几类(多媒体压缩原理)

    多媒体压缩分为哪几类(多媒体压缩原理)

  • 高斯投影是等角投影吗(高斯投影是等角竖轴椭圆柱投影)

    高斯投影是等角投影吗(高斯投影是等角竖轴椭圆柱投影)

  • ps如何叠加照片(ps如何叠加照片放大)

    ps如何叠加照片(ps如何叠加照片放大)

  • 手机提示微信正在运行什么意思(手机提示微信正在录音,如何处理)

    手机提示微信正在运行什么意思(手机提示微信正在录音,如何处理)

  • 滴滴被静默怎么处理(滴滴车主被静默了怎么办)

    滴滴被静默怎么处理(滴滴车主被静默了怎么办)

  • 华为mate30和mate20的区别(华为mate30和mate20pro的区别)

    华为mate30和mate20的区别(华为mate30和mate20pro的区别)

  • 京东怎么解除预约(京东怎么解除预约商品)

    京东怎么解除预约(京东怎么解除预约商品)

  • 苹果流量1x怎么解决(苹果流量1x怎么回事)

    苹果流量1x怎么解决(苹果流量1x怎么回事)

  • lc卡和ld卡区别(什么是lc卡号是什么意思)

    lc卡和ld卡区别(什么是lc卡号是什么意思)

  • 好友点赞为什么不显示(好友点赞为什么看不到)

    好友点赞为什么不显示(好友点赞为什么看不到)

  • 照片发朋友圈怎么发(照片发朋友圈怎么保持清晰度)

    照片发朋友圈怎么发(照片发朋友圈怎么保持清晰度)

  • 全民k歌保存的录音在哪(全民k歌保存的本地录音在文件里怎么找)

    全民k歌保存的录音在哪(全民k歌保存的本地录音在文件里怎么找)

  • 苹果无线耳机话筒在哪(苹果无线耳机话筒坏了能修吗)

    苹果无线耳机话筒在哪(苹果无线耳机话筒坏了能修吗)

  • 手动清除cmos设置技巧分享(清除cmos数据按钮一直亮)

    手动清除cmos设置技巧分享(清除cmos数据按钮一直亮)

  • 圣安德鲁斯湾岸边的三只王企鹅,南乔治亚岛 (© Paul Souders/Getty Images)(圣安德鲁斯市)

    圣安德鲁斯湾岸边的三只王企鹅,南乔治亚岛 (© Paul Souders/Getty Images)(圣安德鲁斯市)

  • 一文了解Python序列化(python的顺序)

    一文了解Python序列化(python的顺序)

  • 增值税专用发票有效期是多长时间
  • 没有发票就不能入账吗
  • 公司税务注销流程是否要不发生业务多久
  • 药品费用开具增值税发票项目应为什么
  • 收到红字发票如何申报增值税?
  • 微信怎么开公司账户
  • 为员工购买商业保险专票可以抵扣吗
  • 电子发票手动导出的发票在哪里
  • 合并报表中少数股东权益是什么意思
  • 劳务派遣营改增政策
  • 加油站冲值加油怎么操作
  • 进项发票认证后暂不抵扣
  • 返利抵扣货款
  • 在建工程非应税项目有哪些?
  • 进项税使报表应交税费负数如何处理?
  • 免交的增值税怎么退
  • 增值税降为13
  • 未成立工会的企业、事业单位
  • 出口外贸海运费的会计处理
  • 财政给企业的补助资金企业是否需要开发票
  • 以前年度记账错误
  • 食堂伙食费需要开票吗
  • 计提社保公司承担部分怎么算
  • 外购无形资产发生的交易费用
  • win10设置闹钟
  • plugin.exe是什么进程
  • 生产性生物资产和消耗性生物资产有什么区别
  • 交易性金融资本
  • 电风扇需要用完电再充吗
  • PHP:is_dir()的用法_Filesystem函数
  • 支付手续费方式委托代销商品确认收入
  • 购买房地产和买房一样吗
  • 哪些货物可以享受减免税政策
  • 建筑物附属设备包括哪些
  • php中的正则表达式怎么使用
  • 企业将设备出租应当作为固定资产吗
  • html+javascript
  • ros机器人自主导航中膨胀地图图层的颜色
  • 【机器学习】python实现吴恩达机器学习作业合集(含数据集)
  • 全连接神经网络是什么意思
  • 怎样安装∪sb
  • php实现微信支付功能
  • php远程访问
  • 公司向股东个人借款的会计分录
  • 新项目分哪几个阶段
  • 其他收益放在哪里
  • 对方代垫包装费怎么做分录
  • 数组和结构体
  • 收到的销项负数发票如何申报
  • 收到预付款发票但是货未到怎么办
  • 企业主营业务收入科目下的余额应转入的科目是
  • 预提费用没有收到发票也没有付款
  • 房租费用能计入什么科目
  • 样机 研发费用归集与核算
  • 出纳去银行存现
  • 票据贴现无效如何讨要票据款
  • 限定性净资产的例子有哪些
  • 个体户4年不注销有事吗
  • 小规模纳税人租赁不动产税率
  • 待处理财产损益期末结转到哪里
  • session入库有什么好处
  • 数据库中的内容怎么换行
  • win7双系统安装教程
  • 通过注册表修改office默认字体
  • linux -al
  • win10打开小娜
  • win8如何使用网页版的onedrive
  • window8.1
  • win1021年更新
  • linux中sudoers
  • shell脚本判断字符串是否为空
  • shell脚本获取进程pid
  • unity3d物体碰撞
  • linux shell命令的返回值
  • 用python编写
  • java script教程
  • 江苏省国税务局严三国
  • 朝阳区下面分几个区
  • 光伏发电地方税收
  • 税额差怎么计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设