多个promise调用顺序,javascript引擎的微任务和队列任务,promise(三)

多个异步函数的调用顺序:运行代码得到的结果是p1,p2,p4,p3

    const p1 = new Promise((resolve, reject) => reject(Error('p1抛出的错误'))).catch(error => console.log(error))const p2 = new Promise((resolve, reject) => reject(Error('p2抛出的错误'))).catch(error => console.log(error))const p3 = new Promise((resolve, reject) => resolve('xx')).then(() => {throw  Error('p3抛出的错误')}).catch(error => console.log(error))const p4 = new Promise((resolve, reject) => reject(Error('p4抛出的错误'))).catch(error => console.log(error))

解释:then()的回调用会产生新的期约,新的期约的函数不会立即运行,而是被放入微任务队列中,这意味着它会在稍后运行。在下一次事件循环的时候再次排队
以上的例子再复杂一点:运行代码得到的结果是p1,p4,p3,p2

    const p1 = new Promise((resolve, reject) => reject(Error('p1抛出的错误'))).catch(error => console.log(error))const p2 = new Promise((resolve, reject) => reject(Error('p2抛出的错误'))).then(error =>  error).then(error =>  error).catch(error => console.log(error))const p3 = new Promise((resolve, reject) => resolve('xx')).then(() => {throw  Error('p3抛出的错误')}).catch(error => console.log(error))const p4 = new Promise((resolve, reject) => reject(Error('p4抛出的错误'))).catch(error => console.log(error))

3.promise结合setTimeout案例

  const p1 = new Promise((resolve, reject) => {console.log('1.这里是同步的代码,Promise里面按顺序调用')resolve('接口返回数据')}).then((value) => {console.log('then1', value)return value}).then((value) => {console.log('then2', value)return value}).catch(error => console.log(error))setTimeout(() => {console.log('setTimeout是最后吗')},0)console.log('2.这里是同步的代码,程序流在外面')
// 1.这里是同步的代码,Promise里面按顺序调用
// 2.这里是同步的代码,程序流在外面
// then1 接口返回数据
// then2 接口返回数据
// setTimeout是最后吗

Promise 回调被处理为微任务,而 setTimeout() 回调被处理为任务队列。
其实setTimeout结合Promise在单页运用中,配合请求接口,渲染数据很有作用。
后续再结合单页出几个案例
请大家持续关注哦~

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

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

相关文章

pybind11实现numpy和OpenCV Mat的数据交互

1、编译安装pybind11 下载源代码:https://github.com/pybind/pybind11, 文档:https://pybind11.readthedocs.io/en/stable/compiling.html 解压后进入到命令行,如果有conda环境,就先进入想要的conda环境&#xff0c…

Poi实现根据word模板导出-文本段落篇

最近在做word模板导出的需求,本来意为是很简单,做起来才发现细节上有很多东西处理起来还是比较麻烦的(客户要求太多!!!) 因此我把涉及到基于word模板导出的这部分整理了一下,大家直…

2024年,前端开发者,不妨看看鸿蒙开发

从大环境也好,行业发展也好,过去10年的前端技术晋级路径已经彻底失效。我在去年看了一眼考公的职位,没有任何一个岗位可以由前端胜任,而如果在后端领域比较资深的话,进可以做技术咨询,退可以考架构公务编。…

【基于 InternLM 和 LangChain 搭建你的知识库】学习笔记

学习参考文档【基于 InternLM 和 LangChain 搭建你的知识库】 学习参考链接【书生・浦语大模型实战营第三课作业(基础进阶)】 理论 实战 收集原始数据 收集2018年-2020年几年间的优秀数学建模论文 修改脚本文件,测试文件 作业 复现课程知识库助手搭建过程 La…

JavaScript程序员必须具备的10个技能

JavaScript程序员必须具备的10个技能: 1. 基础语法:理解并能够运用JavaScript的基础语法,包括变量、数据类型、运算符、控制流语句、循环和数组等。 2. 函数:能够编写和重用函数,理解函数的作用域和闭包,以…

通信扫盲(四)

系列文章目录 1 通信扫盲(一): 通信的本质、通信发展史-各代移动通信的多祉技术、5G、6G应用场景/愿景、LTE是什么?3GPP是什么? 链接:通信扫盲(一) 2 通信扫盲(二&…

「HDLBits题解」Popcount255

本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接:Popcount255 - HDLBits module top_module( input [254:0] in,output reg [7:0] out );integer i ; always (*) beginout 0 ;for…

PDF文件的创建时间可以修改吗?分享你一个简单的小技巧

PDF文件的创建时间能修改吗? PDF文件的创建时间是指该文件首次被创建或生成的日期和时间。这个时间被存储在PDF文件的元数据中,可以通过某些软件查看和修改。 在某些情况下,我们需要将PDF文件的创建时间修改为特定的日期和时间。例如&#…

04 SpringMVC响应数据之页面跳转控制+返回JSON数据+返回静态资源

1. handler方法分析 /*** TODO: 一个controller的方法是控制层的一个处理器,我们称为handler* TODO: handler需要使用RequestMapping/GetMapping系列,声明路径,在HandlerMapping中注册,供DS查找!* TODO: handler作用总结:* 1.接收请求参数(param,json,pathVariable,共享…

如何使用Java采集汽车之家车辆配置参数信息

目录 一、引言 二、采集工具选择 三、采集流程设计 1、确定采集目标 2、确定采集URL 3、发送HTTP请求 4、解析HTML页面 5、CSS选择器或jQuery选择器。 6、异常处理和日志记录 四、代码实现示例 五、结果与分析 六、结论 随着互联网的普及和信息技术的不断发展&…

人人都在用的PDF软件,也要接入ChatGPT了

随着人工智能技术的不断进步和发展,Chatbot技术的应用已经逐渐从娱乐和社交领域扩展到了更多的实际场景中。在办公软件领域,聊天机器人已经成为了提升工作效率、减少人力投入的重要工具,多家头部企业都在探讨将AI接入到软件及应用中的使用方案…

ctfshow元旦水友赛 misc 以假换真wp

记录一下根据官方wp的复现过程 目录 1.解压2.得到新的压缩包3.明文攻击4.上传baidu.jpg至百度网盘得到flag 1.解压 1)下载题目,得到一个名为6.zip的文件 2)尝试直接用360解压,发现需要密码 3)那就常规思路用010打…

便携式VCI汽车售后诊断仪的优点

汽车诊断工具的优点主要包括以下几个方面: 故障检测智能化:汽车诊断I具通过与车辆的紧密连接,能够实时获取车辆的数据流Q参数和诊断信息,实现故障检测的智能化和精确化。快速诊断:汽车诊断I具能够在短时间内完成对车辆的全面检测,提供准确的故障诊断Q结果,帮助维修…

后端杂七杂八系列篇三

后端杂七杂八系列篇三 ① Spring Event用法① 同步代码的用法① 自定义事件② 定义监听器③ 定义发布者④ 发布消息后,接口收到消息 ② 异步代码的用法① 开启异步② 自定义事件③ 自定义监听器(推荐使用 EventListener 注解),使用Async注解④ 定义发布者…

存储卷(数据卷)—主要是nfs方式挂载

1、定义 容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的,一旦容器被删除,数据会丢失。k8s基于控制器创建的pod,delete相当于重启,容器的状态会恢复到原始状态。一旦回到原始状态,后天编辑的文件…

【数据类型】Collections.synchronizedMap 多线程Map,与HashMap的不同

一、Collections.synchronizedMap 简介 Collections.synchronizedMap 是 Java 中提供的工具方法,用于创建一个同步(线程安全)的 Map。它接受一个现有的 Map 对象,并返回一个通过同步包装后的 Map。 下面是一个简单的示例&#x…

Springboot注解@Configuration和@Bean注解作用,生命周期

简介: Configuration 类是定义 bean 配置的地方,而 Bean 方法是具体创建 bean 实例的方法。 Configuration 作用: Configuration 注解用于定义配置类,表明该类包含一个或多个 bean 定义的方法。Spring 容器在启动时会自动扫描这些…

写一个判断鼠标进入方向切换图片的效果

直接看代码&#xff1a; <template><div class"mainrouter centerWindi"><div ref"mouse" class"mouse" mouseenter"handleMouse"></div></div> </template> <script setup> import { onMo…

erlang/OTP 平台(学习笔记)(四)

Erlang语言精要 Erlang shell 相较于日常惯用的系统&#xff0c;Erlang系统是一套更富交互性的环境。使用大部分编程语言时&#xff0c;要么把程序编译成OS可执行文件后运行&#xff0c;要么用解释器来执行一堆脚本文件或编译后的字节码文件。无论哪种情况&#xff0c;都是让…

LeetCode:82. 删除排序链表中的重复元素 II(C++、Java)

目录 82. 删除排序链表中的重复元素 II 题目描述&#xff1a; 实现代码与解析&#xff1a; 链表遍历&#xff1a; 实现代码与解析&#xff1a; 82. 删除排序链表中的重复元素 II 题目描述&#xff1a; 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复…