45.Promise,async,await

news2024/11/27 19:37:34

目录

1  Promise

1.1  状态

1.2  then

1.3  任务的优先级

1.4  连续then

1.4.1  then()的返回值也是一个Promise对象

1.4.2  默认情况下,在第一个then之后,会执行第二个then的成功函数

1.4.3  then的value可以用返回值传递

1.4.4  通过then的返回值决定下一个then执行哪一个函数

1.5  Promise后可以接catch

1.6  Promise后可以接finally

1.7  Promise.all()

1.8  Promise.allSettled()

1.9  Promise.race()

2  async与await

2.1  基本用法

2.1.1  async

2.1.2  await

2.2  async与await可以理解为Promise与then的替代

2.3  async本身是Promise,所以可以使用Promise的方法


视频地址 第十五章 你应该学习的 JS 异步编程与Promise,还有async与await实例详解,助你提升javascript开发功力_哔哩哔哩_bilibili

1  Promise

Promise本身是一个对象,它是来处理异步问题的

1.1  状态

Promise有三个状态 准备状态(pending) ,解决成功状态(fulfilled),解决失败状态(rejected)

  • fulfilled在以往的浏览器中也被叫做resolved

我们打印出来看一下Promise的状态

你可以用第一个形参resolve,将Promise调整为已解决状态

也可以用第二个形参reject,将Promise调整为解决失败状态

解决失败的时候会抛出一个错误,我们可以给这个错误定义内容

解决成功的时候不会抛出错误,你也可以给定义一些信息

状态改变后不可逆,你前面转变为成功后,后面再想转变为失败是不行的

结果它还是成功状态

1.2  then

then里面可以放两个函数,第一个是 成功状态执行的函数,第二个是 失败状态后执行的函数。

可以只写 成功状态函数,不写失败状态函数,直接不写第二个函数就行了

也可以只写 失败状态函数,不写成功状态函数,给第一个参数null就好了,比如then(null,function(){})

在Promise你需要手动的切换成功状态,Promise不会因为你成功了就给你执行then的第一个函数

我们发现1成功打印后并没有成功打印2

但是失败状态不用手动切换

我们下面手动切换成功状态

可以用形参value接到你resolve()中的参数

1.3  任务的优先级

使用Promise后会产生 微任务队列,微任务队列与之前的异步任务队列功能相同,但微任务队列的优先级要高于之前的异步任务队列,之前的异步任务队列我们称之为 宏任务队列。

我们理一下任务执行的优先级 同步任务 > 微任务 > 宏任务

我们看这段代码

1.4  连续then

1.4.1  then()的返回值也是一个Promise对象

我们先打印出p1,p2看一下

then的Promise状态一开始是pending,执行之后才会变成fulfilled,下面这个代码执行顺序是这样的

1.4.2  默认情况下,在第一个then之后,会执行第二个then的成功函数

如果第一个then是失败的状态,第二个then也会执行成功函数,这表明第一个then的默认状态是成功且不受第一个Promise对象影响

1.4.3  then的value可以用返回值传递

失败同样可以,由于默认情况下第二个then一定执行成功函数,所以执行的是成功函数

1.4.4  通过then的返回值决定下一个then执行哪一个函数

除了return new Promise(),我们也可以这样写

还可以这样写

还有很多其他的写法,我们写的时候只用第二种就行了,其他的能看明白就行,其他的写法都是在返回的内容中有then(),比如下面这种

1.5  Promise后可以接catch

catch可以接到catch之前的所有错误,所以catch一般放最后,放在最后你就不需要每一个then都写重复性强的错误函数了

catch的返回值也是Promise,如果在中间遇到问题,由于Promise默认是解决状态,所以catch可以让Promise继续传递下去

1.6  Promise后可以接finally

这个finally可以做请求时的动画,在请求刚开始的时候显示,在请求后消失

1.7  Promise.all()

Promise.all()可以批量处理Promise

遇到失败就会中断

1.8  Promise.allSettled()

Promise.allSettled()如果遇到了失败,不会中断

1.9  Promise.race()

在多个Promise中只取返回最快的那个

2  async与await

async与await都是Promise的语法糖,他们本身是不带新功能的,只是让Promise写起来更简单一点

2.1  基本用法

2.1.1  async

如果在函数前加上关键字 async,可以让这个函数的返回值为已解决状态的Promise对象

给函数定义返回值,会将定义的返回值传递给then

使用async可以避免我们写字符很多的Promise

2.1.2  await

await仅在以async的函数中有效(不在async函数中写会报语法错误),await后通常会接一个Promise对象。

await的意思是异步等待,我们现在做一个函数,函数会返回一个Promise对象,Promise对象中有一个定时器,定时器里面是已解决的内容

然后用async声明一个函数,直接接受函数的返回值

我们会发现在打开页面的一瞬间会打印出Promise对象,并且这个对象的状态是准备阶段

如果我们使用await,我们会发现在test()函数中会等待fun1()执行完毕,再执行下一行

2.2  async与await可以理解为Promise与then的替代

2.3  async本身是Promise,所以可以使用Promise的方法

比如说 catch

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

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

相关文章

为什么老年人会经常性出现吃饭呛咳的情况 什么因素导致的

其实很多老年人在吃饭或是喝水的时候,都存在吞咽困难的问题,呛咳或者是忘了如何下咽。其实在老年人群体当中,这也是一种较为常见的现象,但是很多人都把这种现象当回事。 对于呛咳的现象是很好判断的,在家里老人喝水或是…

专注区块链底层技术突破,“复杂美”用技术开源推动产业未来

杭州复杂美科技有限公司(以下简称:复杂美)成立于2008年,是一家致力于高性能撮合技术研发的区块链底层技术提供商,专注于区块链撮合系统、区块链清算系统的应用与推广。 公司于2013年启动区块链、智能合约的研发应用&am…

PyTorch 深度学习实战 | 基于 ResNet 的花卉图片分类

“工欲善其事,必先利其器”。如果直接使用 Python 完成模型的构建、导出等工作,势必会耗费相当多的时间,而且大部分工作都是深度学习中共同拥有的部分,即重复工作。所以本案例为了快速实现效果,就直接使用将这些共有部…

36岁大龄程序员被裁,找了2个月工作,年包从100万降到50万,要不要接?

为了找到工作,你愿意接受降薪多少?一位36岁的杭州程序员问:36岁被裁,找了2个月工作,年包从100万降到50万,真心纠结,要不要接?网友们分成了旗帜鲜明的两派,一派人认为不要…

【数学模型】欧拉公式和证明

一、说明 在图型学中,欧拉公式很有用处,比如皮克定律也可以用欧拉公式证明。本篇介绍欧拉公式的定义和三个证明过程。 二、欧拉公式 在任何一个规则球面地图上,用 R记区域个 数 ,V记顶点个数 ,E记边界个数 &#xff0c…

BGP基础知识

今天海翎光电的小编主要介绍一下BGP的相关基础知识,文章浅显易懂,适合对BGP完全没有了解的同学。 BGP介绍 边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可…

【cmake篇】选择编译器及设置编译参数

实际开发的过程中,可能有多个版本的编译器,不同功能可能需要设置不同的编译参数。 参考博客链接:选择编译器及设置编译器选项 目录 一、选择编译器 1、查看系统中已有的编译器 2、选择编译器的两种方式 二、设置编译参数 1、add_compi…

CSSOM和CSSOM View

CSSOM和CSSOM View这两个我都不是熟悉的领域。 1.描述样式表和规则等 CSS 的模型部分(CSSOM) cssom中document.styleSheets :获取文档中所有的样式(只读),这个不常见,不做过多的介绍 2.元素视图…

科普|汽车毫米波雷达的规定和标准 微功率短距离无线电发射SRRC认证

01 — 24-24.25 GHz 上一篇提到,在我国《微功率短距离无线电发射设备目录和技术要求》中,保留了24-24.25 GHz的频段作为H类设备,可以用于汽车雷达,它的发射功率限值是:20mW (e.i.r.p),近似为13dBm。除了…

【Open CASCADE -生成MFC和QT事例方式】

源代码目录 adm目录:包含编译OCCT的相关工程; adm/cmake目录:包含使用CMake构建OCCT的相关处理脚本; adm/msvc目录:包含window平台 Visual C 2010, 2012, 2013, 2015, 2017 and 2019等版本的32/64平台solutinon文件; data目录: 包…

ESP32驱动1.28寸GC9A01播放视频(二、程序说明和效果展示)

ESP32驱动1.28寸GC9A01播放视频(二、程序下载和效果展示)1.28寸GC9A01屏幕屏幕引脚定义程序说明程序更改1、Arduino_DataBus *bus和Arduino_GC9A01 *gfx要改成ESP32匹配的2、SPI库的SPI.cpp文件中的“SPIClass::begin”函数中,引脚定义需要跟…

分布式跟踪系统

分布式跟踪系统 背景 当代的互联网的服务,通常都是用复杂的、大规模分布式集群来实现的。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器&#xff0…

护眼灯真的可以保护眼睛吗?推荐五款达到护眼级别的灯

护眼灯是可以起到一定的保护视力的作用。 普通的台灯的出现是为了照明,它的功能只要照明。像眩光、频闪、蓝光等是普通台灯所存在的问题,而这些问题会造成我们的眼睛近视,所以在我国近年来青少年近视率越来越高的重要原因之一。 护眼灯就优化…

对比斐波那契和快排时间复杂度

斐波那契数列时间复杂度 ​ // 计算斐波那契递归Fib的时间复杂度&#xff1f; long long Fib(size_t N) {if(N < 3)return 1;return Fib(N-1) Fib(N-2); }Fib()递归高度是N&#xff0c;那它最后一层就是2^(N-1) 如果N50&#xff0c;最后一层是2^(49)一个恐怖的值 更恐怖…

手撕Udp套接字|实现群聊通信|实现Windows Linux通信交互

​ 专栏和Git地址 操作系统https://blog.csdn.net/yu_cblog/category_12165502.html?spm1001.2014.3001.5482UdpSockethttps://github.com/Yufccode/BitCode/tree/main/Linux/%E4%BB%A3%E7%A0%81/0215Udp%E5%A5%97%E6%8E%A5%E5%AD%97 README 本项目通过Linux套接字编程&…

AiDD AI+软件研发数字峰会开启编程新纪元

随着OpenAI 推出全新的对话式通用人工智能工具——ChatGPT火爆出圈后&#xff0c;人工智能再次受到了工业界、学术界的广泛关注&#xff0c;并被认为向通用人工智能迈出了坚实的一步&#xff0c;在众多行业、领域有着广泛的应用潜力&#xff0c;甚至会颠覆很多领域和行业&#…

go+vue——基于gin框架和gorm的web开发实战

govue——基于gin框架和gorm的web开发实战gin框架视频、资料、笔记安装Go环境&#xff0c; 添加环境变量&#xff08;可能自动添加好&#xff09;下载 Go环境变量goland 报错&#xff1a; GOROOT is not defined创建项目&#xff1a;Golang中的GoPath和GoModule什么是GoPath&am…

kafka安装

kafka安装前置将压缩包拷贝到虚拟机中解压改名更改server.properties启动先启动zookeeper非静默启动。会占用一个黑窗口再启动一个窗口&#xff0c;用jps查看静默启动 加一个-daemon另一种静默启动操作命令创建消息队列查看消息队列创建副本&#xff08;备份&#xff09;单机版…

MySQL数据库,数据的约束

目录 1.数据的约束 1.1约束的类型 1.2NULL约束 1.3UNIQUE约束 1.4DEFAULT约束 1.5PRIMARY KEY约束 1.6FOREIGN KEY约束 1.数据的约束 首先&#xff0c;创建一个名为test的数据库&#xff1a; mysql> create database test charset utf8; Query OK, 1 row affected …

Vue3中shallowRef和shallowReactive的使用?

shallowRef 和 shallowReactive前言shallowRef 和 shallowReactive概述区别shallowReactiveshallowRef总结&#xff1a;注意为什么使用shallowRef和shallowReactive&#xff1f;我们在之前的博客进过 ref 函数和 reactive 函数&#xff0c;他们的作用是将数据转换成响应式的数据…