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

  • 苹果平板怎么隐藏应用(苹果平板怎么隐藏游戏并随时打开)

    苹果平板怎么隐藏应用(苹果平板怎么隐藏游戏并随时打开)

  • 新开的手机号被别人注册了微信怎么办(新开的手机号被注册了抖音)

    新开的手机号被别人注册了微信怎么办(新开的手机号被注册了抖音)

  • 比心新人首单免费吗(比心首单免费从哪里领取)

    比心新人首单免费吗(比心首单免费从哪里领取)

  • wifi静态lp什么意思(wifi的静态ip是干什么的)

    wifi静态lp什么意思(wifi的静态ip是干什么的)

  • wlan打开就自动关闭怎么回事(wlan打开就自动关闭怎么回事oppo)

    wlan打开就自动关闭怎么回事(wlan打开就自动关闭怎么回事oppo)

  • 笔记本带麦克风吗(笔记本带麦克风的耳机)

    笔记本带麦克风吗(笔记本带麦克风的耳机)

  • 腾讯课堂多久后有回放(腾讯课堂多久后能看回放)

    腾讯课堂多久后有回放(腾讯课堂多久后能看回放)

  • 把对方删除了又加上,对方有提示吗(把对方删除了又加回来对方知道吗)

    把对方删除了又加上,对方有提示吗(把对方删除了又加回来对方知道吗)

  • 华为nova7怎么隐藏应用(华为nova7怎么隐藏手机软件)

    华为nova7怎么隐藏应用(华为nova7怎么隐藏手机软件)

  • i54210h属于什么水平(i54210h相当于)

    i54210h属于什么水平(i54210h相当于)

  • 抖音为什么能看到别人在线(抖音为什么能看到通讯录好友)

    抖音为什么能看到别人在线(抖音为什么能看到通讯录好友)

  • 火山小视频和抖音是一家吗(火山小视频和抖音那个先出来)

    火山小视频和抖音是一家吗(火山小视频和抖音那个先出来)

  • word2010环绕方式在哪里(word2010环绕方式有几种详解)

    word2010环绕方式在哪里(word2010环绕方式有几种详解)

  • 信息被拉黑会提示什么(信息被拉黑了对方还能看见吗)

    信息被拉黑会提示什么(信息被拉黑了对方还能看见吗)

  • qq说说发不出去也删不掉怎么办(qq说说发不出去怎么办)

    qq说说发不出去也删不掉怎么办(qq说说发不出去怎么办)

  • 电子计算器off是什么(电子计算器off是哪个键)

    电子计算器off是什么(电子计算器off是哪个键)

  • 苹果手机下载慢是怎么回事(苹果手机下载慢是什么原因)

    苹果手机下载慢是怎么回事(苹果手机下载慢是什么原因)

  • vsco试用会员怎么取消(vsco 会员)

    vsco试用会员怎么取消(vsco 会员)

  • 示波器正弦波怎么调(示波器正弦波怎么变成方波)

    示波器正弦波怎么调(示波器正弦波怎么变成方波)

  • 抖音扫码在哪里找(抖音app扫一扫在哪里)

    抖音扫码在哪里找(抖音app扫一扫在哪里)

  • huaweiMate 20的电池容量(华为mate20的电池容量)

    huaweiMate 20的电池容量(华为mate20的电池容量)

  • 快手竞猜押注在哪里(快手主播开竞猜在哪压)

    快手竞猜押注在哪里(快手主播开竞猜在哪压)

  • 本本拆卸技巧与注意事项(轻薄本拆卸)

    本本拆卸技巧与注意事项(轻薄本拆卸)

  • 最轻的超极本是什么(超级本轻薄本)

    最轻的超极本是什么(超级本轻薄本)

  • vue3-setup语法糖之组件传参(defineProps、defineEmits、defineExpose)(vue3setup语法糖如何定义realtive数据)

    vue3-setup语法糖之组件传参(defineProps、defineEmits、defineExpose)(vue3setup语法糖如何定义realtive数据)

  • 医疗保险单位和个人交的区别
  • 融资租赁税率是什么意思
  • 进项税额记哪方
  • 申报个税人员金额一般
  • 购入股票作为短期投资是什么凭证
  • 审核通过的红字发票怎么作废
  • 以前年度费用调减
  • 企业收到的土地补偿款的企业所得税
  • 账簿登记的重要内容
  • 收到投资款的会计
  • 短期借款的利息会计分录怎么写
  • 调低社保基数怎么操作
  • 未分配利润的计税基础是
  • 少缴纳个人所得税的需要付什么责任
  • 农场管委会是什么性质单位
  • 税控服务费抵扣的文件
  • 税号最后一位字母T
  • 个体户开普票要交企业所得税吗
  • 文化事业建设费计入什么科目
  • 租赁发票多少点
  • 1697510710
  • w10系统搜索
  • 几个人注册公司好还是个体户好
  • 如何设定电脑开机密码锁
  • 汇算清缴是哪个报表
  • 公司贷款过桥费合法吗
  • Win11 Build 22449.1000更新里哪些内容?Win11 Build 22449更新介绍与安装方法
  • win11启动方式
  • 不吃晚饭多久能瘦下来
  • window10解压
  • 分批次付款
  • 高新技术企业股权转让
  • laravel 分层
  • echart横坐标
  • pytorch技巧
  • 什么是进项税转出成本
  • 增值税专用发票丢了怎么补救
  • 暂估入库算材料成本差异吗
  • 上月未结账本月是否能记账
  • 盈余公积转增资本所有者权益会变吗
  • 公司销售不动产增值税
  • 个人对企业的例子
  • 政府补助属于营业外收入吗
  • 开具发票后,如发生销售退回,通常有的两种处理方式是?
  • 应收账款对应什么会计科目
  • 原材料的采购成本怎么计算
  • 库存商品如何结转生产成本
  • 2020发票丢失新规
  • 软件开发公司账一定按项目做吗
  • 差旅费用包含哪些
  • 子公司利润母公司还有其他方式吗
  • 商业承兑汇票提示付款流程
  • 逾期纳税申报会被罚款吗
  • 超市购物卡怎么办理
  • sqlserver查看磁盘大小
  • 捷波mig41tm主板
  • 通过修改注册表激活win7
  • freebsd的软件管理工具ports详解
  • win8怎么外接屏幕
  • SFC无需光盘出马,硬盘搞定
  • nerosvc.exe - nerosvc是什么进程 有什么用
  • win10 cpu使用率高怎么办
  • linuxvim编辑器的用法
  • javascript的canvas
  • node.js安装后自带哪个工具
  • node.js安装教程详细
  • shell if语句的用法
  • 用javascript写表单代码
  • 利用python做一个文字小游戏
  • shell 比较大小
  • 访问网页显示脚本错误
  • javascript怎么学
  • android反编译apk
  • jquery隐藏和显示div
  • 个人所得税如何申报详细流程
  • 上市公司的税务风险大吗
  • 邮储银行优势及特长简介
  • 税务投诉回访电话号码
  • 银行存款利息收入现金流量表计入哪
  • 如何查询公司的营业执照
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设