Promise和async/await

Promise是异步编程的一种解决方案,用来解决多层回调嵌套的问题。它的构造函数是同步执行的,then 方法是异步执行的,所以创建后里面的函数会立即执行,构造函数中的resolve和reject只有第一次执行有效,也就是说Promise状态一旦改变就不能再变。简单说Promises是一个容器或对未来事情的承诺。

const p = new Promise((resolve, reject) => {
    resolve(22);
})
console.log(p); //22
【回调地狱:代码臃肿、可读性差、耦合度高、只能在回调里处理异常】

状态

有三种状态:pending(进行中)、fullfilled(已完成)、rejected(已失败)。只有异步操作的结果可以决定当前是哪一种状态,任何其他操作都不能改变这个状态。未调用resolvereject前它处于pending状态,调用resolve后处于fullfilled状态,调用reject后处于rejected状态。只能有pending->fullfilledpending->rejected这两种过程。当确定为fullfilledrejected后就会处于敲定(settled)状态不会再变

实例方法

1.Promise.then();//注册回调函数,可链式调用,返回值是一个Promise对象

2.Promise.catch();//处于rejected状态或者抛出异常或者错误时执行

3.Promise.finally();//无参数的,无论Promise对象变成fulfilled或reject状态,最终都会执行

类方法

1.Promise.resolve();//相当于new Promise,并且执行resolve操作

2.Promise.reject();//相当于new Promise,并且执行reject操作

3.Promise.race();//多个任务同时执行,返回最先执行结束的结果,无论成功或失败

4.Promise.any();//返回任意一个最快执行 resolve 回调的 Promise 对象

5.Promise.allSettled();//当多个任务都结束(完成或失败)时,返回一个包含每个 Promise 解决状态的对象数组,每个对象表示对应的promise结果,都含有status和value属性

6.Promise.all();//多任务同时执行,若成功则以数组方式返回,若有一个reject则返回reject结果

Promise.all([promise1, promise2, promise3]).then(()=>{})

async/await

使得异步代码看起来像同步代码。async 函数的返回值为 Promise 对象,await 必须写在 async 函数中, 但 async 函数中可以没有 await,如果 await 的 Promise 失败了, 就会抛出异常, 需要通过 try...catch 捕获处理。generatorasync/await类似。

function fn2() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            // resolve(1000)
            reject(1000)
        }, 1000);
    })
}
async function fn3() {
    try {
        const value = await fn2()
    } catch (error) {
        console.log('得到失败的结果', error)
    }
}
fn3() // 得到失败的结果 1000

参考

promise和async await区别 - 简书

Promise精选面试题 - 简书

Promise(详细讲解,后续会进行更新... ...)_promise.all(paths.map-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

随手集☞MySQL部分知识盘点(loading。。。)

字段类型 数值类型 INT: 整数类型,可以是正数或负数。根据显示宽度和是否有符号,其范围会有所不同。TINYINT: 非常小的整数。SMALLINT: 小的整数。MEDIUMINT: 中等大小的整数。BIGINT: 大整数。FLOAT: 单精度浮点数。DOUBLE: 双精度浮点数。DECIMAL(M,N…

Oracle的物理结构解析

这些图是我自己画的,我也会在我的公众号【会用数据库】解析。理解起来非常简单,而且非常好记。不用死记硬背,有兴趣可以来公众号看呀。

GitOps - 为 OpenShift GitOps 配置邮件通知

《OpenShift 4.x HOL教程汇总》 说明:本文已经 在OpenShift 4.15 OpenShift GitOps 1.11.2 环境中验证 文章目录 ArgoCD 的 Notification 功能简介启动 OpenShift GitOps 的 Notification 功能配置邮件通知验证参考 说明:先根据《OpenShift 4 之 GitOp…

Peter算法小课堂—树状数组

大家好,我是人见人爱,花见花开,车见车爆胎的树状数组Peter Pan,hhh 讲正文前,先来一个长文警告⚠很重要的知识点:L SB(SB?) LSB 怎么算呢? 哦……懂了&…

环形链表2--绝妙的运算

一、要求 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统…

静态路由协议实验综合实验

需求: 1、除R5的换回地址已固定外,整个其他所有的网段基于192.168.1.0/24进行合理的IP地址划分。 2、R1-R4每台路由器存在两个环回接口,用于模拟连接PC的网段;地址也在192.168.1.0/24这个网络范围内。 3、R1-R4上不能直接编写到…

机器学习KNN最邻近分类算法

文章目录 1、KNN算法简介2、KNN算法实现2.1、调用scikit-learn库中KNN算法 3、使用scikit-learn库生成数据集3.1、自定义函数划分数据集3.2、使用scikit-learn库划分数据集 4、使用scikit-learn库对鸢尾花数据集进行分类5、什么是超参数5.1、实现寻找超参数5.2、使用scikit-lea…

【vite】

目录 vite介绍vite的基础应用vite创建项目vite创建vue3项目vite创建vue2项目vite创建react项目 vite中使用css的各种功能vite中使用ts vite介绍 一、特点: 开发时效率极高开箱即用,功能完备摄取丰富,兼容rollup超高速热重载预设应用和类库打…

vulhub中 Struts2-015 远程代码执行漏洞复现

影响版本: 2.0.0 - 2.3.14.2 ## 原理与测试 漏洞产生于配置了 Action 通配符 *&#xff0c;并将其作为动态值时&#xff0c;解析时会将其内容执行 OGNL 表达式&#xff0c;例如&#xff1a; xml <package name"S2-015" extends"struts-default"> …

上位机图像处理和嵌入式模块部署(qmacvisual之n点标定)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 工业场景中&#xff0c;很多时候图像是用来做测量的。虽然我们很希望载台是平的&#xff0c;摄像头是正对着拍摄物体的&#xff0c;但是运行时间长…

可视化图表:象形柱图,比柱图漂亮、有趣100倍。

一、什么是象形柱图 象形柱图&#xff08;Pictorial Bar Chart&#xff09;是一种可视化图表&#xff0c;它使用图形或图片代替传统的矩形柱子来表示数据。每个图形或图片的大小和形状都与对应的数据值相关联&#xff0c;从而形成一种视觉上的象征性表示。 象形柱图通常用于展…

【每日刷题】Day3

【每日刷题】Day3 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; 目录 1. 69. x 的平方根 - 力扣&#xff08;LeetCode&#xff09; 2. 70. 爬楼梯 - 力扣&#xff08;LeetCode&#xff09; 3. 118. 杨辉三…

STL容器(3)

1,stack容器 1.1 基本概念 概念&#xff1a;stack是一种先进后出的数据结构&#xff0c;它只有一个出口 因此&#xff1a; 栈中只有顶端的元素才可以被使用&#xff0c;因此占不允许有遍历行为 栈中进入数据称为--入栈&#xff08;push) 栈中弹出数据称为--出栈&#xff08…

【Linux】虚拟机连不上外网 (1),2024百度网络安全岗面试真题收录解析

vi /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTOstatic ONBOOTyes IPADDR? NETMASK? GATEWAY? dns18.8.8.8 dns1144.144.144.144 这两个必填 自我介绍一下&#xff0c;小编13年上海交大毕业&#xff0c;曾经在小公司待过&#xff0c;也去过华为、OPPO等大厂…

深入理解Armv9 DSU-110中的L3 cache

快速链接: 【精选】ARMv8/ARMv9架构入门到精通-[目录] &#x1f448;&#x1f448;&#x1f448; 关键词&#xff1a; DynamIQ cluster、DSU-110、DSU-120、DSU、cache、mmu、缓存、高速缓存、内存管理、MPAM 思考&#xff1a; 1、L1、L2、L3 cache的替换策略是怎样的&#xff…

Android中的aidl接口及案例说明

目录 一、什么是AIDL 二、AIDL语法规格 三、AIDL实例 客户端: 服务端: 一、什么是AIDL AIDL,即 Android Interface Definition Language,用于android不同进程间通信接口。同一个应用里面还是建议用正常接口实现功能即可。 官方说明:Android 接口定义语言 (AIDL) | …

如何使用屏幕变式控制SAP系统操作界面字段的必输、显示或隐藏

在SAP/ERP项目实施中经常会遇到要求把SAP系统操作的界面中某些字段设置为必输&#xff0c;显示或隐藏&#xff0c;遇到这种需求时&#xff0c;有些业务操作界面可以通过后台进行屏幕的字段状态设置解决&#xff0c;而有些业务的操作界面是没有屏幕字段的后台设置的&#xff0c;…

DSP实时计算平台设计方案:912-基于6U CPCIe的双路光纤图像DSP实时计算平台

基于6U CPCIe的双路光纤图像DSP实时计算平台 一、设备概述 设备基于6U CPCIe架构&#xff0c;通过背板交换实现4片信号处理板卡的互联传输&#xff0c;每个信号处理板卡支持双TMS320C6678&#xff0c;支持2路光纤的图像处理&#xff0c;实现FPGA的预处理和备份工…

机器学习中的GBDT模型及其优缺点(包含Python代码样例)

目录 一、简介 二、优缺点介绍 三、Python代码示例 四、总结 一、简介 GBDT&#xff08;Gradient Boosting Decision Tree&#xff09;是一种集成学习算法&#xff0c;被广泛应用于机器学习中的回归和分类问题。它由多个决策树组成&#xff0c;每个决策树都通过迭代逐渐提升…

之前翻硬币问题胡思乱想的完善

题目背景 小明正在玩一个“翻硬币”的游戏。 题目描述 桌上放着排成一排的若干硬币。我们用 * 表示正面&#xff0c;用 o 表示反面&#xff08;是小写字母&#xff0c;不是零&#xff09;&#xff0c;比如可能情形是 **oo***oooo&#xff0c;如果同时翻转左边的两个硬币&#x…