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

  • 苹果平板wlan和cellular的区别(苹果平板wlan和cellular什么意思)

    苹果平板wlan和cellular的区别(苹果平板wlan和cellular什么意思)

  • 尚未授权是什么意思(尚未授权怎么办)

    尚未授权是什么意思(尚未授权怎么办)

  • mate30pro贴钢化膜后不灵敏(mate30pro贴钢化膜也碎屏)

    mate30pro贴钢化膜后不灵敏(mate30pro贴钢化膜也碎屏)

  • 耳机插头规格有几种(耳机插头的型号)

    耳机插头规格有几种(耳机插头的型号)

  • 蓝牙被别人连了怎么办(蓝牙被别人连了怎么关)

    蓝牙被别人连了怎么办(蓝牙被别人连了怎么关)

  • 微信个性签名不显示怎么办(微信个性签名不显示怎么回事)

    微信个性签名不显示怎么办(微信个性签名不显示怎么回事)

  • 手机摄像头玻璃碎了可以换的吗?(手机摄像头玻璃容易刮花吗)

    手机摄像头玻璃碎了可以换的吗?(手机摄像头玻璃容易刮花吗)

  • 通信大数据行程卡是通过什么定位的(通信大数据行程卡怎么更换手机号)

    通信大数据行程卡是通过什么定位的(通信大数据行程卡怎么更换手机号)

  • 微信群里面的机器人是怎么来的(微信群里面的机器人怎么设置)

    微信群里面的机器人是怎么来的(微信群里面的机器人怎么设置)

  • iphonex摔了一下出现一块黑色(iphonex摔到后屏幕失灵)

    iphonex摔了一下出现一块黑色(iphonex摔到后屏幕失灵)

  • 华为手机第一次充电要把电用完吗(华为手机第一次充电需要多长时间)

    华为手机第一次充电要把电用完吗(华为手机第一次充电需要多长时间)

  • 华硕z270a主板上的按钮有什么用(华硕z270gaming主板)

    华硕z270a主板上的按钮有什么用(华硕z270gaming主板)

  • 输入手机号码能找到对方的位置吗(输入手机号码能查到快递吗)

    输入手机号码能找到对方的位置吗(输入手机号码能查到快递吗)

  • 显卡后面的f是什么意思(显卡后面的f是啥意思)

    显卡后面的f是什么意思(显卡后面的f是啥意思)

  • wps怎么清除多余的表格(wps怎么清除多余格子格式)

    wps怎么清除多余的表格(wps怎么清除多余格子格式)

  • 淘宝商家和天猫商家的区别(淘宝商家和天猫商家满减可以叠加吗?)

    淘宝商家和天猫商家的区别(淘宝商家和天猫商家满减可以叠加吗?)

  • 小爱音响调音量的在哪(小爱音响调声音大小)

    小爱音响调音量的在哪(小爱音响调声音大小)

  • 快手解除绑定的手机号(快手解除绑定的实名认证需要多久可以重新绑定)

    快手解除绑定的手机号(快手解除绑定的实名认证需要多久可以重新绑定)

  • 怎么样把网课视频保存(怎样把网课视频课录下来)

    怎么样把网课视频保存(怎样把网课视频课录下来)

  • vivo5g手机几月份上市(vivo手机一般几月出新款)

    vivo5g手机几月份上市(vivo手机一般几月出新款)

  • 应用程序后缀名怎么改(应用程序的后缀名)

    应用程序后缀名怎么改(应用程序的后缀名)

  • 淘客怎么推广(淘客怎么推广自己的链接)

    淘客怎么推广(淘客怎么推广自己的链接)

  • 全面一次性奖金收入扣税标准
  • 小规模纳税人可以开13%的发票吗
  • 归属于母公司的净资产
  • 国有资本及权益客观增减因素
  • 财务报表提示未审计
  • 电子发票与纸质发票具有同等效力
  • 核定和查账区别
  • 支付员工一次性补偿呈批件
  • 质量问题用实物形容
  • 凭证可以部分冲销吗
  • 进销项税额的会计分录
  • 营改增后工程税收怎么计算
  • 普通发票企业有用吗
  • 税负率的计算公式excel
  • 公司收境外汇款
  • 预提费用和待摊费用是根据以下哪项原则设置的会计科目
  • 自己种的苗木开发票要什么手续
  • 盘亏的转销金额
  • macOS 11 Big Sur beta 4值得升级吗?macOS 11 Big Sur beta 4更新详解
  • 坏坏狼故事绘本
  • 企业为职工代扣代缴的个人所得税计入什么科目
  • 单位延缓缴纳社保员工可以要求赔偿吗
  • PHP:imagecreatefromgd2()的用法_GD库图像处理函数
  • 同一控制下企业合并发生的审计费用计入
  • 快速制作一个演示文稿可用什么
  • 个人代开普票的个人经营所得税如何计算
  • 小程序uniacid
  • 业务招待费属于现金流量表中的哪个项目
  • php 解压缩
  • 使用筷子就餐会不会传染乙肝病毒
  • 图像识别算法
  • init 6命令
  • 借款凭证会计分录是什么
  • 一般公司是什么企业类型
  • 非正常损失的增值税进项税额转出
  • 或有对价的确认条件
  • 交强险必须要买驾乘险才能投保
  • mongodb mysql配合使用
  • 没有发票意味着什么
  • 培训学校的主营业务是什么
  • 商业承兑汇票的风险
  • 契税的计税金额是什么
  • 收到违约金如何做账
  • 建筑行业的收入做什么科目
  • 销售货物并提供安装服务是混合销售吗
  • 金税盘服务费可以退吗
  • 收到退回多付的材料退款
  • 旅游服务会议费发票
  • 利息专用发票可以抵扣吗
  • mysql源码编译
  • sqlserver2008r2创建实例
  • linux自动清理内存软件
  • centos 启动gnome
  • linux怎样安装
  • windows使用linux软件
  • windows8连wifi
  • shstart.exe - shstart是什么进程 有什么用
  • centos soft lockup
  • linux tar -xzvf
  • win7系统添加右键菜单在哪里设置
  • win10取消uac
  • cocos creator 优化 drawcall 合并
  • easyui下拉列表
  • Android 执行油猴脚本
  • Android游戏开发读后感
  • nodejs爬虫框架crawler
  • 超详细的!!!2023澳门六开彩
  • javascript点击切换div内容
  • python生成txt文档
  • javascript如何学
  • unity开发游戏教程
  • js闭包的使用
  • jquery跨域请求有哪些方式
  • 广东民生求助热线电话是多少
  • 保定市国税局车管所所长
  • 纳税申报的期限是多久
  • 年度关联业务往来报告
  • 在京东上买货
  • 广州代理记账公司注册
  • 劳务派遣工为什么没年假了
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设