ES6 之 Promise 构造函数知识点总结 (四)

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了 Promise 对象。

Promise 对象有以下两个特点。

  1. 对象的状态不受外界影响。 Promise 对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是 Promise 这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。

  2. 一旦状态改变,就不会再变,任何时候都可以得到这个结果。 Promise 对象的状态改变,只有两种可能:从 pending 变为 fulfilled 和从 pending 变为 rejected 。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对 Promise 对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

Promise 有几种静态方法和实例方法。

静态方法:

  • Promise.resolve(value): 返回一个以给定值解析为成功的 Promise 对象。
  • Promise.reject(reason): 返回一个由于给定原因而拒绝的 Promise 对象。
  • Promise.all(iterable): 接收一个可迭代对象,所有输入的 promise 都成功时返回一个 promise,其结果为一个数组,包含所有输入 promise 的结果。如果任何一个输入 promise 失败,则立即拒绝。
  • Promise.race(iterable): 接收一个可迭代对象,一旦其中一个 promise 解决或拒绝,就返回一个 promise,其结果或拒绝理由与第一个解决或拒绝的 promise 相同。
  • Promise.allSettled(iterable): 接收一个可迭代对象,等待所有的 promise 都完成(无论是解决还是拒绝),然后返回一个 promise,其结果为一个数组,包含每个 promise 的状态。

实例方法(Promise.prototype):

  • .then(onFulfilled, onRejected): 注册当 promise 解决或拒绝时的回调函数。onFulfilled 在 promise 成功时调用,onRejected 在 promise 失败时调用。返回一个新的 promise。
  • .catch(onRejected): 添加一个处理 promise 失败情况的回调函数。返回一个新的 promise。
  • .finally(onFinally): 注册一个在 promise 完成(无论成功或失败)后执行的回调函数。返回一个新的 promise。

用例:

// 使用 Promise.resolve 创建一个成功的 promise
let resolvedPromise = Promise.resolve("Success");// 使用 Promise.reject 创建一个失败的 promise
let rejectedPromise = Promise.reject("Failure");// 使用 Promise.all 等待多个 promise 完成
Promise.all([resolvedPromise, rejectedPromise]).then(results => console.log(results)).catch(error => console.error(error));// 使用 Promise.race 等待最快完成的 promise
Promise.race([resolvedPromise, rejectedPromise]).then(value => console.log(value)).catch(error => console.error(error));// 使用 Promise.allSettled 等待所有 promise 完成,不论成功或失败
Promise.allSettled([resolvedPromise, rejectedPromise]).then(results => console.log(results)); // 输出每个 promise 的状态// 使用 Promise.prototype.then 注册回调
let promise = new Promise((resolve, reject) => {resolve("Done");
});
promise.then(value => {console.log(value); // 输出:Done
});// 使用 Promise.prototype.catch 处理错误
promise.then(() => {throw new Error("An error occurred");
}).catch(error => {console.error(error.message); // 输出:An error occurred
});// 使用 Promise.prototype.finally 注册最终回调
promise.finally(() => {console.log("This is the final step.");
});

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

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

相关文章

基于swagger插件的方式推送接口文档至torna

目录 一、前言二、登录torna三、创建/选择空间四、创建/选择项目五、创建/选择应用六、获取应用的token七、服务推送7.1 引入maven依赖7.2 test下面按照如下方式新建文件 一、前言 Torna作为一款企业级文档管理系统,支持了很多种接口文档的推送方式。官方比较推荐的…

centos8安装python3.8.19并在python虚拟环境运行程序

一、安装python3.8.19 1.1 下载python 安装包 wget https://www.python.org/ftp/python/3.8.19/Python-3.8.19.tgz 1.2 操作系统安装一些库 yum -y install bzip2 bzip2-devel ncurses openssl openssl-devel openssl-static xz lzma xz-devel sqlite sqlite-devel gdbm gd…

DP(开篇) | Java | 动态规划相关知识点总结

《代码随想录 - 动态规划理论基础》 简介 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的,…

防火墙安全策略与用户认证综合实验

一、实验拓扑 二、实验需求 1.DMZ区内的服务器&#xff0c;办公区仅能在办公时间内<9:00-18:00>可以访问&#xff0c;生产区的设备全天可以访问 2.办公区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3.办公区设备10.0.2.10不充许访问DMZ区的FTP服务器和HT…

【java计算机毕设】个人理财管理系统MySQL springboot html maven小组设计项目源码代码

目录 1项目功能 2项目介绍 3项目地址 1项目功能 【java计算机毕设】个人理财管理系统MySQL springboot html maven小组设计项目源码代码 2项目介绍 系统功能&#xff1a; 个人理财管理系统包括管理员、用户两种角色。 管理员功能&#xff1a; 用户信息管理&#xff08;…

ns3学习笔记(四):路由概述

基于官网文档的 Routing Overview 部分详细研究一下ns3中路由是怎么工作的 文档链接16.4. Routing overview — Model Library 一、概述 NS3整体的工作架构如下&#xff1a; 路由部分的工作架构如下&#xff1a; 路由部分目前大多数用到的算法都包含在Ipv4RoutingProtocol部分…

将格内多行文字展开成多格

表格的A列是分类&#xff0c;B列由多行文字组成&#xff0c;即分隔符是换行符。 AB1Account NumberInteraction21Jan 1,2023 - Hello.32Jan 2, 2023 - Good morning. Jan 3, 2023 - Good night. Jan 4, 20 Jan 5, 2023 - Good night. Jan 6, 2023 - Good afternoon.43Jan 1,20…

基于Java技术的网上图书商城系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术、SpringBoot框架 工具&#xff1a;Eclipse、Navicat、Maven 系统展示 首页 用户注册界面…

RK3588开发笔记-ES8311音频芯片调试记录

目录 前言 一、ES8311 二、原理图连接 三、内核配置 四、设备树配置 五、设备调试 总结 前言 本篇博客主要记录如何在RK3588平台上调试ES8311音频芯片的过程。这包括硬件连接、内核配置、驱动程序调试和测试步骤。 一、ES8311 ES8311是一款高性能、低功耗的音频Codec,支持…

1996-2023年各省农村居民人均消费支出数据(无缺失)

1996-2023年各省农村居民人均消费支出数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;1996-2023年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;农村居民人均消费支出 4、范围&#xff1a;31省 5、缺失情况&#xff1a;无缺失 6、指标解释&…

视频汇聚平台EasyCVR设备录像回看请求播放时间和实际时间对不上,是何原因?

安防监控EasyCVR视频汇聚平台可提供多协议&#xff08;RTSP/RTMP/国标GB28181/GAT1400/海康Ehome/大华/海康/宇视等SDK&#xff09;的设备接入、音视频采集、视频转码、处理、分发等服务&#xff0c;系统具备实时监控、云端录像、回看、告警、平台级联以及多视频流格式分发等视…

Java中的公平锁和非公平锁

1、什么是公平锁和非公平锁 公平锁和非公平锁是指在多线程环境下&#xff0c;如何对锁进行获取的顺序和策略的不同。 公平锁是指多个线程按照申请锁的顺序来获取锁&#xff0c;即先到先得的策略。当一个线程释放锁之后&#xff0c;等待时间最长的线程将获得锁。公平锁的优点是保…

java 中钻石操作符 <> 的使用场景

在 Java 中,<> 符号通常被称为 "钻石操作符" (Diamond Operator),主要用于泛型类型的简化表示。<> 操作符引入于 Java 7,以减少泛型实例化时的冗余代码。以下是 <> 符号在 Java 中的几种主要使用场景: 1. 泛型类型实例化 在 Java 7 之前,实…

Redis主从部署

文章目录 Redis主从部署1.下载安装Redis2.单点双副本主从配置1.修改配置信息2.修改配置文件redis.conf3.拷贝配置文件到每一个实例文件夹里4.修改每一个实例的端口和工作目录5.配置主从关系6.检查效果 3.哨兵模式监控主从1.创建实例目录2.复制配置文件并进行修改3.启动并测试 4…

微信定时推送LeetCode每日一题,再也不怕没人喊你刷题了

前段时间发过一篇关于微信机器人开发的文章&#xff0c;讲述了如何快速开发一个微信机器人&#xff0c;本篇文章就来实现一个最近开发的一个功能案例&#xff0c;在这个案例中会遇到了各种问题&#xff0c;可以帮助大家减少自己去踩坑的时间。通过此案例也可以帮助你去扩想一些…

Profibus_DP转ModbusTCP网关模块连马保与上位机通讯

Profibus转ModbusTCP网关模块&#xff08;XD-ETHPB20&#xff09;广泛应用于工业自动化领域。例如&#xff0c;可以将Profibus网络中的传感器数据转换为ModbusTCP协议&#xff0c;实现数据的实时监控和远程控制。本文介绍了如何利用Profibus转ModbusTCP网关&#xff08;XD-ETHP…

leetcode134双周赛 子数组按位与值为 K 的数目「动态规划」「位运算」

3209. 子数组按位与值为 K 的数目 题目描述 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回 nums 中有多少个子数组满足&#xff1a;子数组中所有元素按位 AND 的结果为 k 思路1:动态规划 打力扣打PTSD了&#xff0c;看什么题都是DP 状态&#xff1a; d p [ i …

c++ 宏和模板

&#xff08;1&#xff09;宏的应用 宏定义可以实现类似于函数的功能&#xff0c;但是它终归不是函数&#xff0c;而宏定义中括弧中的“参数”也不是真的参数&#xff0c;在宏展开的时候对 “参数” 进行的是一对一的替换。 assert() 断言 断言&#xff0c;是宏&#xff0c;…

【AMBA】AHB总线中的HTRANS、HSIZE、HBURST以及1K边界问题

HTRANS、HSIZE和HBURST共同决定下一次数据传输的地址。 HTRANS[1:0]定义传输类型 HTRANS[1:0]主机传输状态描述00IDLE空闲表示没有进行数据传输&#xff0c;默认状态。主设备虽然可能已经占用了总线&#xff0c;但是还没有开始传输数据。从设备需要返回OKAY响应01BUSY忙主设备…

springboot+vue项目实战2024第二集jwt

1.登陆注册校验token,jwt校验 <!--java-jwt--><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.4.0</version></dependency> <!--test--><dependency><groupId&…