宏队列和微队列

promise学习

    • js的宏队列和微队列
      • 说明
      • 微任务(Microtasks)
      • 宏任务(Macrotasks)
      • 执行顺序
    • 案例
    • 案例2
    • 注意:
    • 案例3
    • 案例4

js的宏队列和微队列

  • 说明

    • JS中用来存储待执行回调函数的队列包含2个不同特定的列队
    • 宏列队: 用来保存待执行的宏任务(回调), 比如: 定时器回调/DOM事件回调/ajax回调
    • 微列队: 用来保存待执行的微任务(回调), 比如: promise的回调/MutationObserver的回调
    • JS执行时会区别这2个队列
      • JS引擎首先必须先执行所有的初始化同步任务代码
      • 每次准备取出第一个宏任务执行前, 都要将所有的微任务一个一个取出来执行
  • 微任务(Microtasks)

微任务是为了优化异步代码的执行而设计的,通常用于需要尽快执行的场景,比如 Promise 的回调。
微任务的例子包括:Promise 回调、MutationObserver、process.nextTick(在 Node.js 中)。
微任务队列是在当前任务执行完毕后立即执行的,即在主线程空闲时,微任务队列中的任务会被优先执行。
微任务可以添加新的微任务到队列中,并且会在当前任务执行完毕后立即执行这些新添加的微任务。

  • 宏任务(Macrotasks)

宏任务通常与浏览器或 Node.js 的 I/O 操作相关,比如定时器、事件监听、网络请求等。
宏任务的例子包括:setTimeout、setInterval、setImmediate(在 Node.js 中)、I/O 操作、UI 渲染等。
宏任务会按照顺序添加到任务队列中,并且会在微任务队列清空后执行。
宏任务可以添加新的宏任务或微任务到队列中。

  • 执行顺序

执行同步代码,直到执行栈为空。
执行所有微任务队列中的任务,如果在执行微任务的过程中又添加了新的微任务,也会在这个周期内执行。
如果有需要,执行 UI 渲染。
执行宏任务队列中的一个任务。
重复步骤 2-4。

  • 案例

console.log('同步代码开始');// 微任务
Promise.resolve().then(() => {console.log('微任务 1');
});// 宏任务
setTimeout(() => {console.log('宏任务 1');
}, 0);// 微任务
Promise.resolve().then(() => {console.log('微任务 2');
});console.log('同步代码结束');

// 执行顺序:
// 同步代码开始
// 同步代码结束
// 微任务 1
// 微任务 2
// 宏任务 1

  • 案例2

console.log('同步代码开始');// 微任务
Promise.resolve().then(() => {console.log('微任务 1');
});// 宏任务
setTimeout(() => {console.log(1)
}, 0)
new Promise((resolve) => {console.log(2);//同步resolve()
}).then(() => {console.log(3)
}).then(() => {console.log(4)
})
console.log(5)

// 执行顺序:
// 同步任务2
// 同步任务5
// 微任务 3
// 微任务 4
// 宏任务 1

注意:

在 JavaScript 中,Promise 构造函数中的回调是同步执行的,而 Promise 的 then 方法中的回调是异步执行的(作为微任务)。这是因为 Promise 构造函数中的回调是为了初始化 Promise 的状态,而 then 方法中的回调是为了在 Promise 解决或拒绝后执行的。

  • 案例3

const first = () => (new Promise((resolve, reject) => {console.log(3);//同步任务let p = new Promise((resolve, reject) => {console.log(7);//同步任务setTimeout(() => {console.log(5);//宏任务resolve(6)}, 0)resolve(1)})resolve(2)p.then((arg) => {console.log(arg);//微任务 返回1})}))
first().then((arg) => {console.log(arg);//微任务 返回2
})
console.log(4);//同步任务
//3,7,4,1,2,5
  • 案例4

setTimeout(() => {console.log("0") //宏任务
}, 0)
new Promise((resolve, reject) => {console.log("1");//同步任务resolve()
}).then(() => {console.log("2");//第一个 Promise 构造函数中的 resolve 被调用,使得 then 方法中的回调被添加到微任务队列中。//当主线程的同步代码执行完毕后,开始执行微任务队列中的任务,打印出 2new Promise((resolve, reject) => {console.log("3")//发现有同步任务,立即执行resolve()}).then(() => {console.log("4")//微任务}).then(() => {console.log("5")//微任务})
}).then(() => {console.log("6");//微任务
})new Promise((resolve, reject) => {console.log("7")//同步任务resolve()
}).then(() => {console.log("8")//微任务
});
//1, 7, 2, 3,8, 4, 6, 5, 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/41194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

除了 Python 之外,程序员常用的编程语言还有哪些?它们的优缺点分别是什么?

JavaScript 优点: 应用广泛,是web前端开发的主要语言。上手相对容易,学习资源丰富。拥有庞大的社区和生态系统,各种库和框架非常丰富。缺点: 动态类型语言,代码容易出错,调试相对困难。不同浏览器对JavaScript的解释可…

【docker nvidia/cuda】ubuntu20.04安装docker踩坑记录

docker nvidia 1.遇到这个错误,直接上魔法(科学上网) OpenSSL SSL_connect: Could not connect to nvidia.github.io:443 这个error是运行 NVIDIA官方docker安装教程 第一个 curl 命令是遇到的 2. apt-get 更新 sudo apt update遇到 error https://download.do…

openEuler系统之使用Keepalived+Nginx部署高可用Web集群

Linux系统之使用Keepalived+Nginx部署高可用Web集群 一、本次实践介绍1.1 本次实践简介1.2 本次实践环境规划二、keepalived介绍2.1 keepalived简介2.2 keepalived主要特点和功能2.3 使用场景三、Keepalived和Nginx介绍3.1 Nginx简介3.2 Nginx特点四、master节点安装nginx4.1 安…

平面设计考试题

考试题 缺省页作用:缓减缺省页带来的负面情绪,增加s用户与产品的粘度,提升产品的用户体验 网站基本类型 c端b端 c端 面向用户和消费者的 门户站 产品网站 企业网站 电商网站 专题页面 游戏网站 视频网站 h5移动端 四大门户网站:新浪&…

104. 建造最大岛屿

题目描述:给定一个由 1(陆地)和 0(水)组成的矩阵,你最多可以将矩阵中的一格水变为一块陆地,在执行了此操作之后,矩阵中最大的岛屿面积是多少。岛屿面积的计算方式为组成岛屿的陆地的…

安卓自动化的一些API

def run_adb_command():pass创建指定大小的文件 def create_random_file(file_path: str, file_size: int 1024):# 1M 1024 * 1024if file_path.endswith("/"):raise Exception(f"请输入正确的文件路径:{file_path}")file_name file_path.rsplit("…

安装Yarn的方法

安装Yarn的方法取决于你的操作系统。以下是几种常见操作系统上安装Yarn的步骤: Windows 使用Yarn的MSI安装程序 访问Yarn的官方网站(https://yarnpkg.com/getting-started/install),下载最新版本的Yarn安装程序(通常是…

shark云原生-日志体系-ECK

文章目录 0. ECK 介绍1. 部署 CRDS & Opereator2. 部署 Elasticsearch 集群3. 配置存储4. 部署示例 0. ECK 介绍 ECK(Elastic Cloud on Kubernetes)是Elasticsearch官方提供的一种方式,用于在Kubernetes上部署、管理和扩展Elasticsearch…

桥接(Bridge)

桥接(Bridge) 桥接(Bridge)__bridge__bridge_transfer__bridge_retained 桥接(Bridge) 在开发 iOS 应用程序时我们有时会用到 Core Foundation 对象(简称 CF),例如 Core…

python 循环计算阶乘函数

应用场景: 1. 数学计算和问题求解,例如组合数学、概率统计等领域中,经常需要计算阶乘。 2. 算法设计中,某些算法可能需要用到阶乘来计算排列组合的数量或进行特定的数学运算。 3. 计算特定问题的解,如计算 n 个元素的全…

Redis这样优化后,又能“抗住”更大的并发了

插: AI时代,程序员或多或少要了解些人工智能,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈,越努力越幸运,大家…

在Ubuntu上安装VNC服务器教程

Ubuntu上安装VNC服务器方法:按照root安装TeactVnc,随后运行vncserver输入密码,安装并打开RickVNC客户端,输入服务器的IP,最后连接输入密码即可。 VNC或虚拟网络计算,可让您连接到远程Linux / Unix服务器的…

百数教学:如何用分析图表助力报表可视化?

表单收集的数据是决策的重要依据,而报表则是分析和处理这些数据的关键工具。 通过报表,我们能够进行明细查询,深入了解每一条数据的细节;通过汇总功能,用户能够快速掌握整体情况;计算平均值有助于用户评估…

为何Web前端开发仍坚守 HTML 和 CSS,而不全然拥抱纯 JavaScript?

在Web开发的世界里,HTML、CSS 和 JavaScript 三者构成了前端开发的基石。尽管 JavaScript 以其强大的功能和灵活性赢得了开发者们的青睐,甚至有人提出是否可以完全使用 JavaScript 来取代 HTML 和 CSS,实现“纯 JavaScript 开发”。然而&…

《nginx应用》-- nginx简单部署vue项目

一、vue项目的打包 vue项目在本地调试完成后,即可执行以下命令打包部署,此时会生成一个 dist 包,这个包即是我们要部署的文件。 npm run build 二、nginx 的安装 nginx 的安装比较简单,直接用 yum 安装即可 yum install nginx…

SCT612404通道,高效高集成,摄像头模组电源集成芯片

集成三路降压变换器,1CH高压BUCK,2CH低压Buck >HVBuck1:输入电压4.0V-20V,输出电流1.2A,Voo300mV/500mV >LVBuck2:输入电压2.7V-5V,输出电流0.6A , 固定1.8V输出 ;LVBuck3:输λ2.7V-5V,输出电流1.2A,可设定固定输出: 1 . 1 V / 1 . 2 V / 1 . 3 …

for nested data item, row-key is required.报错解决

今天差点被一个不起眼的bug搞到吐,就是在给表格设置row-key的时候,一直设置不成功,一直报错缺少row-key,一共就那两行代码 实在是找不到还存在什么问题... 先看下报错截图... 看下代码 我在展开行里面用到了一个表格 并且存放表格…

公共事件应急日常管理系统-计算机毕业设计源码40054

公共事件应急日常管理系统的设计与实现 摘 要 本研究基于Spring Boot框架,设计并实现了公共事件应急日常管理系统,旨在提升公共事件的应急响应和日常管理效率。系统包括应急资源管理、物资申请管理、物资发放管理、应急培训管理、科普宣教管理、公共事件…

html5中的iframe

HTML5中的iframe 浏览上下文是浏览器展示文档的环境,通常是一个tab标签页,一个窗体或者是浏览器页面的一部分。每个浏览上下文都有一个活动文档的源和一个记录所有展示文档的有序历史。浏览上下文的通讯被严格限制,只有两个同源的浏览器上下…

浔川为何做起音乐、电影报?——浔川官方回应

官方回应 满足群众对音乐和电影文化的需求:为读者提供音乐和电影方面的资讯、评论、介绍等,丰富人们的文化生活。 推动当地音乐和电影产业的发展:通过报道本地的音乐、电影活动等,为提供宣传和推广的平台,促进其繁荣。…