Event loop微任务宏任务

Vue学习记录之十九 Event Loop,宏任务和微任务 当一个宏任务执行完毕后,会检查是否有微任务队列,如果有,则将微任务队列中的所有任务依次执行完毕,然后再继续选择下一个宏任务执行。这样的过程循环进行,形成了事件循环。微任务通常在宏任务执行完毕后立即执行,因此微任务具有更高的优先级,可以在页面渲染前执行,从而提供更好的用户体验。微任务的优先级高于宏任务,因此微任务会在本轮宏任务执行结束后立即执行,而不是等到下一个事件循环。按顺序执行, 同步任务直接执行,异步任务进入异步队列,执行完以后,在进行入异步列队,然后在看是同步还是异步任务,如此循环执行。 阅读详情

1. 微任务、宏任务

宏任务包括:setTimeout setInterval Ajax  Dom事件
微任务:  promise   async/await

注意:微任务比宏任务的执行时间要早

使用异步的场景

定时任务 :seTimeout, setInverval
网络请求:ajax请求,动态<img>加载
事件绑定

2. 执行具体步骤顺序

  • 先执行同步代码,遇到异步宏任务则将异步宏任务放入宏任务队列中
  • 遇到异步微任务则将异步微任务放入微任务队列中
  • 当所有同步代码执行完毕后,再将异步微任务从队列中调入主线程执行
  • 微任务执行完毕后再将异步宏任务从队列中调入主线程执行,一直循环直至所有任务执行完毕。

  await  之后,做什么?
分两种情况:

1.不是promise对象

  • 如果不是 promise , await会阻塞后面的代码,先执行async外面的同步代码,同步代码执行完,再回到async内部,把这个非promise的东西,作为 await表达式的结果

2.是promise对象

  • 如果它等到的是一个 promise 对象,await 也会暂停async后面的代码,先执行async外面的同步代码,等着 Promise 对象 fulfilled,然后把 resolve 的参数作为 await 表达式的运算结果。
     

3. 面试试题


    async function async1() {
        console.log( 'async1 start' )
        await async2()
        console.log( 'async1 end' )
    }
    
    async function async2() {
        console.log( 'async2' )
    }
    
    console.log( 'script start' )
    
    setTimeout( function () {
        console.log( 'setTimeout' )
    }, 0 )
    
    async1();
    
    new Promise( function ( resolve ) {
        console.log( 'promise1' )
        resolve();
    } ).then( function () {
        console.log( 'promise2' )
    } )
    
    console.log( 'script end' )

分析

1.直接打印同步代码 console.log(‘script start’)

首先是2个函数声明,虽然有async关键字,但不是调用我们就不看。然后首先是打印同步代码 console.log('script start')

2.将 setTimeout 放入宏任务队列

3.调用 async1( ),打印 内部同步代码 console.log( ‘async1 start’ )

4. 遇到await async2()

1.它先计算出右侧的结果,2.然后看到await后,中断async函数

- 先得到await右侧表达式的结果。执行async2(),打印同步代码console.log('async2'), 并且return Promise.resolve(undefined)
- await后,中断async函数,先执行async外的同步代码

被阻塞后,执行async之外的代码

5. 执行async2(),打印同步代码console.log('async2'),

6.执行new Promise(),Promise构造函数是直接调用的同步代码,所以 console.log( ‘promise1’ )

代码运行到promise.then()

代码运行到promise.then(),发现这个是微任务,所以暂时不打印,只是推入当前宏任务的微任务队列中。

7.打印同步代码console.log( ‘script end’ )

8.执行微任务 await 打印console.log( ‘async1 end’ )

9.执行微任务打印 promise2

10.执行宏任务  setTimeout  打印console.log(‘setTimeout’)

答案

     script start
     async1 start
     async2
     promise1
     script end
     async1 end
     promise2
     setTimeout

JavaScript 任务队列详解:Event Loop、宏任务与微任务 Event Loop 执行顺序执行同步代码(主线程上的任务)。执行所有微任务(Microtask Queue)。执行一个宏任务(Macrotask Queue)。回到步骤 2,执行所有新的微任务。继续执行宏任务队列中的下一个任务。优先级对比微任务 > 宏任务(微任务会在每个宏任务前全部执行完)。多个微任务会按照添加顺序执行。多个宏任务也是按照添加顺序执行。掌握事件循环(Event Loop) 阅读详情

相关推荐

保姆级教程:用OpenCV和MediaPipe在Python里实现实时手势识别(附完整代码)

本文提供了一份详细的Python教程,教你如何使用OpenCV和MediaPipe实现实时手势识别系统。从环境配置、手部关键点检测到手势分类算法,逐步讲解如何构建高精度手势识别应用,适用于智能家居控制、PPT操作等场景。教程包含完整代码示例和性能优化技巧,特别适合计算机视觉初学者和开发者实践。

weixin_28677005的博客 332

浅析js执行顺序

一、为什么JavaScript是单线程?   作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。比如,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准? 为了利用多核CPU的计算能力,HTML5提出Web Worker标准...

deqg33573的博客 340

SAP EWM 内向交货流程(一)

本文介绍了SAP EWM系统中内向交货单的基本配置与操作流程。

huqinghai的专栏 2402

EventLoop的宏任务、微任务执行(图文讲解)

事件循环Event Loop,这是目前浏览器和NodeJS处理JavaScript代码的一种机制,而这种机制存在的背后,就有因为JavaScript是一门的语言。单线程和多线程最简单的区别就是:单线程同一个时间只能做一件事情,而多线程同一个时间能做多件事情。而JavaScript之所谓设计为单线程语言,主要是因为它作为浏览器脚本语言,主要的用途就是与用户互动,操作Dom节点。而在这个情景设定下,假设JavaScript。

Blog of Leviash 1115

2023年全国职业院校技能大赛高职组“区块链技术应用”赛项赛卷(3卷)解析

我们先绘制题组中所有设计图我这边作图用的国内的在线作图工具。

2301_76737000的博客 5421

PRD撰写效率翻倍秘籍:我是如何用大模型+飞书文档搭建自动化工作流的

本文分享了如何利用大模型与飞书文档构建自动化工作流,以大幅提升PRD撰写效率。通过结构化需求输入、设计模块化提示词模板,并借助自动化脚本桥接数据与文档,产品经理可将繁琐的文档撰写工作自动化,从而将精力聚焦于产品战略与用户洞察。

weixin_28520495的博客 408

事件轮询(Event Loop) 宏任务与微任务

事件轮询(Event Loop) 宏任务与微任务

weixin_58340013的博客 2497

Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.5 RTC设备编写与实现

4. Linux kernel RTC子系统goldfish_rtc driver分析。电脑,会需要时间,还比如 我们的手机、平板,都需要时间;驱动基本就是应用层需要什么数据你给什么数据就行,基本必须实现的就是。3.2 Linux kernel RTC 设备描述符讲解。中看到他的具体实现,也可以根据他的寄存器描述直接在。5. 将驱动添加进kernel和测试RTC驱动。系统来说,时间是一个非常重要的功能;之类的函数接口,接下来我们就开始讲解如何写。,所以我们直接移植设备树即可。,他的寄存器很简单,你可以从。

DSMGUOGUO的博客 570

解释浏览器中的EventLoop机制,区分宏任务和微任务。

是 JavaScript 异步执行的核心机制,负责协调任务(如事件回调、定时器、网络请求等)的执行顺序。,能帮助开发者优化代码性能,避免因任务堆积导致的页面卡顿,并正确管理异步逻辑的执行时机。:微任务执行过程中新生成的微任务会立即加入队列,并在当前阶段全部执行。的优先级管理,特别是。

qq_44165941的博客 864

在鸿蒙中使用AVPlayer完成视频的播放【坚果派】

播放的全流程包含:创建AVPlayer,设置播放资源和窗口,设置播放参数(音量/倍速/缩放模式),播放控制(播放/暂停/跳转/停止),重置,销毁资源。5.准备播放:调用prepare(),AVPlayer进入prepared状态,此时可以获取duration,设置缩放模式、音量等。8.退出播放:调用release()销毁实例,AVPlayer进入released状态,退出播放。6.视频播控:播放play(),暂停pause(),跳转seek(),停止stop() 等操作。今天我们来看一下视频如何正常播放。

坚果的博客 4057

基于YOLOv8的野生菌菇检测、识别与分类系统

YOLOv8是YOLO系列模型的最新版本,继承了YOLO系列高效、精确的特点。YOLOv8采用了新的网络架构,并优化了推理速度和检测精度。与传统的目标检测算法(如Faster R-CNN)不同,YOLO模型通过一次前向传播同时完成目标定位与分类,因而具有非常高的计算效率。

YOLO 1284

这一次,彻底弄懂 JavaScript 执行机制(写的非常好)

本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我。 不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定的几行代码,我们需要知道其输出内容和顺序。因为javascript是一门单线程语言,所以我们可以得出结论: *javascript是按照语句出现的顺序执行的* 看到这里读者要打人了:我难道不知...

qq_34117170的博客 1032

Pytorch入门教程

Pytorch学习总结:1.张量Tensor 张量是一种特殊的数据结构,与数组和矩阵非常相似。在PyTorch中,我们使用张量对模型的输入和输出以及模型的参数进行编码。 张量类似于NumPy的ndarray,除了张量可以在 GPU 或其他硬件加速器上运行。事实上,张量和NumPy数组通常可以共享相同的底层内存,从而无需复制数据。...

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 4万+

Event loop 宏任务微任务 详解

Event Loop是一个程序结构,用于等待和发送消息和事件。简单说,就是在程序中设置两个线程:一个负责程序本身的运行,称为"主线程";另一个负责主线程与其他进程(主要是各种I/O操作)的通信,被称为"Event Loop线程"(可以译为"消息线程")。官方解释:JavaScript主线程从"任务队列"中读取异步任务的回调函数,放到执行栈中依次执行。这个过程是循环不断的,所以整个的这种机制又称为EventLoop(事件循环)我们都知道 js是单线程的原因:。作为浏览器脚本语言,

青山不改,绿水长流。 662

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Event Loop、宏任务、微任务到底什么关系?

原文地址: 「前端进阶」从多线程到Event Loop全面梳理 面试题:说说事件循环机制(满分答案来了) CPU、进程、线程 CPU、进程、线程之间的关系 cpu:计算机的核心,承担了所有的计算任务; 进程: 进程就好比工厂的车间,它代表CPU所能处理的单个任务,CPU使用时间片轮转进度算法来实现同时运行多个进程; 线程: 线程就好比车间里的工人,一个进程可以包括多个线程,多个线程共享进程资源; 浏览器是多进程的,每一个tab就是一个独立的进程; 浏览器包含了主进程、第三方插件进程、GPU进程、渲染进程

Whoopsina的博客 986

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

宏任务、微任务与Event Loop

说到宏任务和微任务,我们就不得不提 Event Loop 了 首先我们要知道两点: JavaScript是单线程的语言 Event Loop是javascript的执行机制 javascript事件循环 一般来说,非阻塞性的任务采取同步的方式,直接在主线程的执行栈完成。 一般来说,阻塞性的任务都会采用异步来执行,异步的工作一般会交给其他线程完成,然后回调函数会放到事件队列中。 从...

xuzhaokuan的博客 467

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

深入理解 Event Loop 之宏任务与微任务

js运行机制 在了解宏任务与微任务之前,先了解一下js运行机制 js是单线程,运行在浏览器或者node环境中,所有任务都在一个线程上执行,这个时候有的同学可能就会想。为什么js是单线程的呢,如果是多线程的话不是可以提高效率吗? 那么问题来了,如果是多线程的话,两条命令同时操作同一个DOM,一个是在DOM中添加内容,另一个是删除DOM。那么同时进行的话浏览器会不知所措,因为两条相互排斥的命令同时执行,本就是不应该的。 所以为了避免复杂性,JavaScript从一开始便是单线程,也是它的核心特征之一。 那么什么

weixin_43920582的博客 487

JS 中的 Event Loop,宏任务,微任务

JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事 Event Loop 在JavaScript中,任务被分为两种,一种宏任务(MacroTask)也叫Task,一种叫微任务(MicroTask) 浏览器中的Event Loop Javascript 有一个 main thread 主线程和 call-stack 调用栈(执行栈),所有的任务都会被放到调用栈等待主线程执行。 主线程从"任务队列"中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为Event Loop(事

qt的博客 148

彻底搞懂 Event Loop:宏任务与微任务的执行顺序全解析

🔍 Event Loop 核心机制解析: JavaScript 通过单线程+Event Loop实现异步处理,核心流程遵循"同步→微任务→宏任务"循环: 同步任务立即执行 微任务(Promise.then/await等)在当前循环全部清空 宏任务(定时器/事件等)每次循环处理一个 关键区分: 微任务:与Promise相关,执行优先级高 宏任务:需外部触发的异步操作 典型执行顺序: 同步代码 → 微任务队列清空 → 宏任务(执行时若产生新微任务会再次清空)→ 循环往复 掌握这一机制能有效

why404 922

Event-Loop、宏任务、微任务到底是个啥?

为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。有需要的小伙伴,可以点击下方卡片领取,无偿分享。

小陈的博客 620

彻底搞懂 Event Loop!一次性吃透宏任务、微任务、执行顺序

面试中的异步顺序题,核心考点就在这里。

码刀攻城 777

微任务,宏任务和Event-Loop

一段代码让你了解Event-Loop console.log(1); setTimeout(() =&gt; { console.log(2); }, 0); new Promise((resolve, reject) =&gt; { console.log(3); resolve(); }).then(data =&gt; { console.log(4); ...

果果的博客 547

javascript基础-微任务、宏任务、event loop

js任务分同步任务和异步任务。 在异步任务中,分为宏任务 macro 和微任务 micro。 通常微任务的执行是在当前主线程宏任务执行完毕之前,当前没有可执行的微任务时,才会开启下一个宏任务。 一、微任务 微任务包含 async、Promise.then、MutationObserver、webworker。 微任务不按照代码执行顺序执行,但他是在当前宏任务执行结束前都会执行完;可以获取回调。 nodeJs中的process.nextTick,也是微任务。 二、宏任务 宏任务包含 setTi

quanxin0222的博客 657

ajax请求是宏任务还是微任务_一文搞懂JS系列(六)之微任务与宏任务,Event Loop

写在最前面:这是我即将开始写的一个系列,主要是在框架横行的时代,虽然上班用的是框架,但是对于面试,以及技术进阶,JS基础知识的铺垫是锦上添花,也是不得不学习的一块知识,虽然开汽车的不需要很懂汽车,只需要掌握汽车的常用功能即可。但是如果你懂汽车,那你也能更好地开车,同理。当然,一篇文章也不会光光只讲一个知识点,一般会将有关联的知识点串联起来,一边记录自己的学习,一边分享自己的学习,互勉!如果可以的...

weixin_39526564的博客 814

js中宏任务和微任务和Event-Loop

看看下面的一段代码?你觉得输出的是什么? setTimeout(_ => console.log(4)) new Promise(resolve => { resolve() console.log(1) }).then(_ => { console.log(3) }) console.log(2) 跟你想象的一样的嘛? 整个这一串代码我们所在的层级我们看做一个任务,其中我们先执行同步代码。第一行的 setTimeout 是异步代码,跳过,来到了 new Promis

晨曦月的博客 697

微任务、宏任务与Event-Loop

首先,JavaScript是一个单线程的脚本语言。 所以就是说在一行代码执行的过程中,必然不会存在同时执行的另一行代码,就像使用alert()以后进行疯狂console.log,如果没有关闭弹框,控制台是不会显示出一条log信息的。 亦或者有些代码执行了大量计算,比方说在前端暴力破解密码之类的鬼操作,这就会导致后续代码一直在等待,页面处于假死状态,因为前边的代码并没有执行完。 所以如果全部...

w1366352655的博客 364
上一篇: Promise .then .catch async await
下一篇: vue3 vue-router
BUG_devil
博客等级 码龄5年 45粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值