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://xiahunao.cn/news/2806597.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Frida javascript hook 检测设备信息获取等

对 Android 应用进行 hook 常见的有 Xposed、Frida 等,Xposed 有时候可能不尽人意,或许您可以试试 Frida ~ frida -U -f com.primer.gamecerter -l hookStartActivity.js TODO 后续是否可以对检测数据(堆栈、类名、方法名、参数、返回值&…

如何控制负压电源芯片的EN

上文我们探讨了如何将负压控制信号转变成正压,这样的信号通常是由负压的芯片产生的,比如负电压的电源管理芯片的power good信号,那么负压芯片应该由谁来控制呢?如何实现对负压电源管理芯片的有效控制呢?   举例&…

Yolov9全文翻译!

Yolo v9全文翻译 论文链接:👿 YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information 代码链接:👿 https://github.com/WongKinYiu/yolov9/tree/main 大量图片来袭!

Linux课程三课---Linux开发环境的使用(yum的相关)

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

2023全新UI千月影视APP源码 | 前后端完美匹配、后端基于ThinkPHP框架

应用介绍 本文来自:2023全新UI千月影视APP源码 | 前后端完美匹配、后端基于ThinkPHP框架 - 源码1688 简介: 2023全新UI千月影视APP源码 | 前后端完美匹配、后端基于thinkphp框架 图片:

使用向量数据库pinecone构建应用02:检索增强生成RAG

Building Applications with Vector Databases 下面是这门课的学习笔记:https://www.deeplearning.ai/short-courses/building-applications-vector-databases/ Learn to create six exciting applications of vector databases and implement them using Pinecon…

提升装备制造企业竞争力:2023年CRM选型与应用完全解读

在加快产业转型升级的大背景下,高端装备制造业既面临机遇也面临挑战。随着公司规模的不断壮大,再加上装备制造业营销体系及服务体系管理体系的复杂性,一些问题逐渐暴露出来,装备制造业企业需要根据自身业务需求和管理流程选择合适…

Code-Audit(代码审计)习题记录6-7

介绍: 自己懒得搭建靶场了,靶场地址是 GitHub - CHYbeta/Code-Audit-Challenges: Code-Audit-Challenges为了方便在公网练习,可以随地访问,本文所有的题目均来源于网站HSCSEC-Code Audit 6、习题6 题目内容如下: 源代…

Java+SpringBoot,打造极致申报体验

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

K线实战分析系列之三:吞没形态

K线实战分析系列之三:吞没形态 一、吞没形态二、看涨吞没形态三、看跌吞没形态四、吞没形态判别标准 一、吞没形态 两根或两根以上的K线形成的组合形态,吞没形态就是一种主要的反转形态。 这个形态由两根K线组成,前短后长,一阴一…

【安卓逆向】一款小说app去除广告与解锁vip分析

这次的受害者是一款破解圈里面大名鼎鼎的:56yU6Laj6ZiB😼 先来看看开屏广告(穿山甲) 阅读小说时的广告(百度) 你就说烦不烦🤣 先来去除穿山甲广告:com.bytedance.pangle.Zeus.hasi…

【C++私房菜】面向对象中的多态

文章目录 一、多态二、对象的静态类型和动态类型三、虚函数和纯虚函数1、虚函数2、虚析构函数3、抽象基类和纯虚函数4、多态的原理 四、重载、覆盖(重写)、隐藏(重定义)的对比 一、多态 OOP的核心思想是多态性(polymorphism)。多态性这个词源自希腊语,其含义是“多…

07_html

文章目录 引言前端概述分类 HTML快速入门重要的body标签注释hr标签br标签一些常见的标签标题标签div标签span标签p标签a标签img标签路径问题 ol和ul标签table标签input标签(表单元素)textarea标签(表单元素)select标签&#xff08…

三分钟快速搭建家纺行业小程序商城:轻松实现电子商务梦想

随着互联网的普及和移动设备的广泛使用,越来越多的商业活动正在向数字化转型。在这个过程中,小程序商城作为一种新型的电子商务模式,正逐渐受到商家的青睐。本文将通过具体步骤,指导读者如何开发一个纺织辅料小程序商城。 一、选择…

unity学习(41)——创建(create)角色脚本(panel)——UserHandler(收)+CreateClick(发)——发包!

1.客户端的程序结构被我精简过,现在去MessageManager.cs中增加一个UserHandler函数,根据收到的包做对应的GameInfo赋值。 2.在Model文件夹下新增一个协议文件UserProtocol,内容很简单。 using System;public class UserProtocol {public co…

Pycharm服务器配置与内网穿透工具结合实现远程开发的解决方法

文章目录 一、前期准备1. 检查IDE版本是否支持2. 服务器需要开通SSH服务 二、Pycharm本地链接服务器测试1. 配置服务器python解释器 三、使用内网穿透实现异地链接服务器开发1. 服务器安装Cpolar2. 创建远程连接公网地址 四、使用固定TCP地址远程开发 本文主要介绍如何使用Pych…

【最新Dubbo3深入理解】Dubbo3源码中的一些小技巧

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复 「资料」 可领取编程高频电子书! 在我后台回复「面试」可领取硬核面试笔记! 文章导读地址…

C语言中的字体背景颜色汇总

客官请看效果 客官请看代码 #include <stdio.h> #include <stdlib.h> #include <windows.h>int main() {int i;for (i 0; i < 254; i) {SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), i); // 设置当前文本颜色为循环变量对应的颜色printf(…

算法学习(十一)拓扑排序

拓扑排序 1. 概念 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序&#xff0c;是将G中所有顶点排成一个线性序列&#xff0c;使得图中任意一对顶点u和v&#xff0c;若边<u,v>∈E(G)&#xff0c;则u在线性序列中出现在v之前。通常&#xff0c;这样的线性…

离散数学 第八单元 布尔代数

目录 1. 布尔函数 2. duality 二元性 3. 表示布尔函数的布尔表达式 sum-of-products expansions 4. Functional Completeness 5. Logic Gates 逻辑门​​​​​​​ 4. 最小化 K-map卡诺图 Quine-McCluskey法 1. 布尔函数 嗯也就是我要知道布尔代数是啥形式&#xff…