Promise相关理解记录

一、Promise基础定义相关

Promise是一个构造函数,调用时需要使用new关键字

Promise是解决回调地狱的一种异步解决方式

Promise有三个状态:pending(进行中)、fulfilled(成功)、rejected(失败)

Promise的状态只会从 pending→fulfilled  或者 pending→rejected ,并且不会再改变

new Promise((resolve, reject) => {if ('成功') {resolve('.then回调函数的参数')} else {reject('.catch回调函数的参数')}
})

二、Promise的实例方法

  1. then  成功时调用
  2. catch  失败时调用
  3. finally  成功失败都会调用

1、then方法支持链式调用,可同时执行多个then方法

后续then方法接收到的参数为前面一个then方法的返回值(为空时是undefined)

new Promise((resolve, reject) => {resolve(1)
}).then(res => {console.log(res); // 1return 2
}).then(res => {console.log(res); // 2
}).then(res => {console.log(res); // undefinedreturn 3
}).then(res => {console.log(res); // 3
})

2、then方法链式回调时,有一个返回reject就会执行catch方法 

new Promise((resolve, reject) => {resolve(1)
}).then(res => {console.log(res); // 1return new Promise((resolve, reject) => {reject(999)})
}).then(res => {console.log(res);
}).then(res => {console.log(res);return 3
}).then(res => {console.log(res);
}).catch((err) => {console.log(err); // 999})

三、Promise的静态方法

1、all( [] )

参数是promise实例数组

将多个promise实例放到一起去处理,全部为成功时执行then,有一个失败就执行catch

let p1 = new Promise((resolve, reject) => {resolve(11)
})
let p2 = new Promise((resolve, reject) => {reject(22)
})
let p3 = new Promise((resolve, reject) => {reject(33)
})
Promise.all([p1, p2, p3]).then((result) => {console.log(result); // [返回值1,返回值2,...]
}).catch(err => {console.log(err); // 第一个失败的返回值  22
})

2、allSettled( [] )

参数是promise实例数组

所有实例状态都有结果了就执行then,无论成功失败

let p1 = new Promise((resolve, reject) => {resolve(11)
})
let p2 = new Promise((resolve, reject) => {reject(22)
})
let p3 = new Promise((resolve, reject) => {reject(33)
})
Promise.all([p1, p2, p3]).then((result) => {// [{status:'fulfilled',value:'返回值'},{status:'rejected',reason:'失败的原因'}]console.log(result); 
})

3、any()

参数是promise实例数组

任一实例成功时执行then,全部都未成功时执行catch

4、race()

参数是promise实例数组

任一实例完成时执行then,该实例成功就执行then、失败执行catch

5、reject( reason )

参数是失败原因

返回一个失败的promise对象实例

let p4 = Promise.reject('失败的原因')
console.log(p4);

 

6、resolve( any )

①. 参数是promise实例

结果:直接返回这个实例

②. 参数是一个具有then方法的对象

结果:将这个对象转为Promise对象,并立即执行对象的then方法

let thenable = {then:()=> {console.log(909);}
}
let thenable2 = {then: (resolve, reject) => {resolve(99)}
}
Promise.resolve(thenable); // 909
Promise.resolve(thenable2).then((res) => {console.log(res); // 99
})

③. 参数是没有then方法的对象或者参数不是对象

结果:返回一个状态为resolved的Promise对象,并将参数传入下一个then

let htneable = {a: 1
}
Promise.resolve(htneable).then((res) => {console.log(res); // {a:1}
})

④. 不带任何参数

结果:返回状态为resolved的Promise对象。

通常用来直接执行then方法内容

Promise.resolve().then(() => {console.log(111);
})

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

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

相关文章

300分钟吃透分布式缓存-13讲:如何完整学习MC协议及优化client访问?

协议分析 异常错误响应 接下来,我们来完整学习 Mc 协议。在学习 Mc 协议之前,首先来看看 Mc 处理协议指令,如果发现异常,如何进行异常错误响应的。Mc 在处理所有 client 端指令时,如果遇到错误,就会返回 …

信号系统之线性图像处理

1 卷积 图像卷积的工作原理与一维卷积相同。例如,图像可以被视为脉冲的总和,即缩放和移位的delta函数。同样,线性系统的特征在于它们如何响应脉冲。也就是说,通过它们的脉冲响应。系统的输出图像等于输入图像与系统脉冲响应的卷积…

pclpy 半径滤波实现

pclpy 半径滤波实现 一、算法原理背景 二、代码1.pclpy 官方给与RadiusOutlierRemoval2.手写的半径滤波(速度太慢了,用官方的吧) 三、结果1.左边为原始点云,右边为半径滤波后点云 四、相关数据 一、算法原理 背景 RadiusOutlier…

Linux——进程概念

目录 冯诺依曼体系结构 操作系统 管理 系统调用和库函数 进程的概念 进程控制块——PCB 查看进程 通过系统调用获取进程标示符 通过系统调用创建进程 进程状态 运行状态-R ​编辑 浅度睡眠状态-S 深度睡眠状态-D 暂停状态-T 死亡状态-X 僵尸状态-Z 僵尸进程…

AD24-PCB的DRC电气性能检查

1、 2、如果报错器件选中,不能跳转时,按下图设置 3、开始出现以下提示时处理 4、到后期,错误改得差不多的时候;出现以下的处理步骤 ①将顶层和底层铜皮选中,移动200mm ②执行以下操作 ③将铜皮在移动回来,进…

STM32_IIC_AT24C02_1_芯片简介即管脚配置

STM32的IIC总线是存在bug,感兴趣的可以上网搜一搜。我们可以使用两个I/O口和软件的方式来模拟stm32的iic总线的控制,所以就不需要使用stm32的硬件控制器了,同理数据手册中的I2C库函数也没有用了。 ROM(只读存储器)和…

黄仁勋最新专访:机器人基础模型可能即将出现,新一代GPU性能超乎想象

最近,《连线》的记者采访了英伟达CEO黄仁勋。 记者表示,与Jensen Huang交流应该带有警告标签,因为这位Nvidia首席执行官对人工智能的发展方向如此投入,以至于在经过近 90 分钟的热烈交谈后,我(指代本采访的…

杰发科技AC7801——SRAM 错误检测纠正

0.概述 7801暂时无错误注入,无法直接进中断看错误情况,具体效果后续看7840的带错误注入的测试情况。 1.简介 2.特性 3.功能 4.调试 可以看到在库文件里面有ecc_sram的库。 在官方GPIO代码里面写了点测试代码 成功打开2bit中断 因为没有错误注入&#x…

Netdata:实时高分辨率监控工具 | 开源日报 No.173

netdata/netdata Stars: 63.9k License: GPL-3.0 Netdata 是一个监控工具,可以实时高分辨率地监视服务器、容器和应用程序。 以下是该项目的主要功能: 收集来自 800 多个整合方案的指标:操作系统指标、容器指标、虚拟机、硬件传感器等。实…

软件常见设计模式

设计模式 设计模式是为了解决在软件开发过程中遇到的某些问题而形成的思想。同一场景有多种设计模式可以应用,不同的模式有各自的优缺点,开发者可以基于自身需求选择合适的设计模式,去解决相应的工程难题。 良好的软件设计和架构&#xff0…

k8s的svc流量通过iptables和ipvs转发到pod的流程解析

文章目录 1. k8s的svc流量转发1.1 service 说明1.2 endpoints说明1.3 pod 说明1.4 svc流量转发的主要工作 2. iptables规则解析2.1 svc涉及的iptables链流程说明2.2 svc涉及的iptables规则实例2.2.1 KUBE-SERVICES规则链2.2.2 KUBE-SVC-EFPSQH5654KMWHJ5规则链2.2.3 KUBE-SEP-L…

css复习

盒模型相关: border:1px solid red (没有顺序) 单元格的border会发生重叠,如果不想要重叠设置 border-collapse:collapse (表示相邻边框合并在一起) padding padding影响盒子大小的好处使用 margin应用: 行内或行内块元素水…

windows Server下Let‘s Encrypt的SSL证书续期

一、手动续期方法: 暂停IIS服务器 --> 暂时关闭防火墙 --> 执行certbot renew --> 打开防火墙 --> 用OpenSSL将证书转换为PFX格式-->pfx文件导入到IIS --> IIS对应网站中绑定新证书 --> 重新启动IIS -->完成 1、暂停IIS服务器 2、暂时关闭…

【LeetCode每日一题】 单调栈的案例 42. 接雨水

这道题是困难,但是可以使用单调栈,非常简洁通俗。 关于单调栈可以参考单调栈总结以及Leetcode案例解读与复盘 42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 …

浅析SpringBoot框架常见未授权访问漏洞

文章目录 前言Swagger未授权访问RESTful API 设计风格swagger-ui 未授权访问swagger 接口批量探测 Springboot Actuator未授权访问数据利用未授权访问防御手段漏洞自动化检测工具 CVE-2022-22947 RCE漏洞原理分析与复现漏洞自动化利用工具 其他常见未授权访问Druid未授权访问漏…

私域运营-需要认清的事实

一、私域不能单纯依靠微信渠道 误区:很多企业仍停留在如何让用户在微信去分享裂变,然后带动新用户的阶段。 私域的核心在于“开源节流”,就是如何通过更多渠道获取更多客户,并且避免客户的批量流失。 私域讲究的是如何从公域的“…

【读博杂记】:近期日常240223

近期日常 最近莫名其妙,小导悄悄卷起来,说要早上八点半开始打卡,我感觉这是要针对我们在学校住的,想让我们自己妥协来这边租房子住,但我感觉这是在逼我养成规律作息啊!现在基本上就是6~7点撤退,…

Ubuntu20.04开启/禁用ipv6

文章目录 Ubuntu20.04开启/禁用ipv61.ipv62. 开启ipv6step1. 编辑sysctl.confstep2. 编辑网络接口配置文件 3. 禁用ipv6(sysctl)4. 禁用ipv6(grub)附:总结linux网络配置 Ubuntu20.04开启/禁用ipv6 1.ipv6 IP 是互联网…

openGauss学习笔记-227 openGauss性能调优-系统调优-其他因素对LLVM性能的影响

文章目录 openGauss学习笔记-227 openGauss性能调优-系统调优-其他因素对LLVM性能的影响 openGauss学习笔记-227 openGauss性能调优-系统调优-其他因素对LLVM性能的影响 LLVM优化效果不仅依赖于数据库内部具体的实现,还与当前所选择的硬件环境等有关。 表达式调用C…

【力扣白嫖日记】176.第二高的薪水

前言 练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。终于把所有的简单题刷完,进入第一道中等题。 今日题目: 176.第二高的薪水 表:Employee 列名类型…