Promise的状态和方法是什么?

 `Promise` 的状态和方法

 1. `Promise` 的状态

一个 `Promise` 可以处于以下三种状态之一:

- Pending(待定):初始状态,表示异步操作正在进行中,`Promise` 还没有被解决或拒绝。
- Fulfilled(已完成):操作成功完成,`Promise` 已经 resolved(解决),并返回结果。
- Rejected(已拒绝):操作失败,`Promise` 已经 rejected(拒绝),并返回错误原因。

这三个状态是 `Promise` 在生命周期中会经历的状态,一旦状态从 Pending 变为 Fulfilled 或 Rejected,它就不能再改变状态。

 2. `Promise` 的方法

`Promise` 提供了一些常用的方法来处理异步操作的结果。这些方法用于设置 `Promise` 完成时的行为或处理错误。

1. `then(onFulfilled, onRejected)`

- `then()` 方法用于指定当 `Promise` 成功时(状态变为 `Fulfilled`)执行的回调函数,以及当 `Promise` 失败时(状态变为 `Rejected`)执行的回调函数。
- `onFulfilled` 是操作成功时的回调,`onRejected` 是操作失败时的回调。

javascript
promise.then(result => {console.log('操作成功:', result);},error => {console.log('操作失败:', error);}
);


 

链式调用:
- `then()` 返回一个新的 `Promise` 对象,因此可以进行链式调用。链式调用的返回值会传递到下一个 `then()` 中。

javascript
promise.then(result => {return result + ' 继续执行';}).then(newResult => {console.log(newResult);  // '继续执行'}).catch(error => {console.log(error);});


 

 2. `catch(onRejected)`

- `catch()` 方法是专门用来处理 `Promise` 被拒绝(即状态为 `Rejected`)时的回调。它实际上是 `.then(null, onRejected)` 的简写。

javascript
promise.then(result => {console.log(result);}).catch(error => {console.error('操作失败:', error);});


 

 3. `finally(onFinally)`

- `finally()` 方法用于在 `Promise` 执行完毕后,无论成功还是失败,都会执行 `onFinally` 回调函数。`finally` 返回的 `Promise` 对象会继承原 `Promise` 的状态。

javascript
promise.then(result => {console.log('成功:', result);}).catch(error => {console.log('失败:', error);}).finally(() => {console.log('无论成功或失败都会执行');});


 

 4. `Promise.resolve(value)`

- `Promise.resolve(value)` 方法返回一个已经 `fulfilled` 状态的 `Promise`,并且返回 `value` 作为结果。
- 如果传入的是一个 `Promise` 对象,则返回该 `Promise` 对象。

javascript
let resolvedPromise = Promise.resolve('成功');
resolvedPromise.then(result => {console.log(result);  // '成功'
});


 

5. `Promise.reject(reason)`

- `Promise.reject(reason)` 方法返回一个已经 `rejected` 状态的 `Promise`,并且返回 `reason` 作为拒绝的原因。

javascript
let rejectedPromise = Promise.reject('失败');
rejectedPromise.catch(error => {console.log(error);  // '失败'
});

6. `Promise.all(iterable)`

- `Promise.all()` 方法接收一个可迭代对象(例如数组),并返回一个新的 `Promise`。该 `Promise` 会等到所有的 `Promise` 都完成时才会被 `fulfilled`,或者当其中一个 `Promise` 被 `rejected` 时就被 `rejected`。
- 该方法适用于需要并行执行多个异步操作,并等待它们全部完成的场景。

javascript
let promise1 = Promise.resolve(1);
let promise2 = Promise.resolve(2);
let promise3 = Promise.resolve(3);Promise.all([promise1, promise2, promise3]).then(results => {console.log(results);  // [1, 2, 3]}).catch(error => {console.error(error);});


 

 7. `Promise.race(iterable)`

- `Promise.race()` 方法接收一个可迭代对象(例如数组),并返回一个新的 `Promise`。该 `Promise` 在第一个 `Promise` 完成(无论是 `fulfilled` 还是 `rejected`)时就会结束,不再等待其他 `Promise` 完成。

javascript
let promise1 = new Promise(resolve => setTimeout(resolve, 100, 'A'));
let promise2 = new Promise(resolve => setTimeout(resolve, 200, 'B'));Promise.race([promise1, promise2]).then(result => {console.log(result);  // 'A' (第一个完成的 Promise)});


 

 3. 总结

- `then()`:用于处理成功和失败的回调,支持链式调用。
- `catch()`:用于处理 `Promise` 被拒绝时的回调,简化错误处理。
- `finally()`:无论成功或失败都执行的回调,用于执行清理操作。
- `Promise.resolve()`:用于返回一个已解决的 `Promise`。
- `Promise.reject()`:用于返回一个已拒绝的 `Promise`。
- `Promise.all()`:用于并行执行多个异步操作,所有操作完成后才会返回。
- `Promise.race()`:用于返回第一个完成的异步操作。

这些方法帮助我们更优雅地处理异步操作,避免回调地狱,并简化错误处理。

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

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

相关文章

Windows云服务器支持哪些数据库管理系统?

Windows云服务器因其良好的兼容性和企业级支持,广泛用于网站托管、企业管理系统、金融应用、数据分析等场景。在这些应用中,数据库管理系统(DBMS)起着至关重要的作用。Windows 服务器支持多种数据库,包括关系型数据库(SQL)和非关系型数据库(N…

MongoDB 实际工作中应用场景

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

03 相机标定图像采集

学完本文,您将获取一下技能: 1:如何提升标定质量,如选择标定板,标定图像采集的注意事项, 2:实现标定图像自动筛选的代码 3:量产场景如何通过一张图像来标定相机 为了实现良好的标定效果,以下因素在标定数据采集前必须设置得当。 标定板选择 标定板尺寸准确材料平…

GitHub美化个人主页3D图表显示配置操作

这个功能主要是用的这个开源仓库:https://github.com/yoshi389111/github-profile-3d-contrib 想看效果的话,我的个人主页:https://github.com/Sjj1024 开始操作 1.创建自己的github主页属性项目——跟你github用户名一致即可,…

buu-jarvisoj_fm-好久不见52

格式化字符串漏洞题 x等于4x等于4​​​​​​​x等于4​​​​​​​x等于4 可以知道是第11个参数,%11$ 定位到这个位置,然后%n往这个位置写入4 1.先用pwndbg调试得到偏移量 2.查看获取x的地址 3.构造ROP链,发送连接 from pwn import *# …

AwesomeQt分享3(含源码)

AwesomeQt 这个项目包含了多个Qt组件的使用示例,旨在展示Qt各种强大功能的实现方式。 源码分享 github: awesome_Qtgitee: 后续同步 项目进度 QCustomPlot曲线控件示例 支持排序和筛选的列表控件示例 支持排序和筛选的表格控件示例 属性表示例 Dock窗口示例 自绘…

ubuntu 安装 g++

文章目录 前提一、安装 g1.1 安装1.2 验证 前提 安装 tflite_support 报错 error: subprocess-exited-with-error RuntimeError: Unsupported compiler -- at least C11 support is needed!一、安装 g 1.1 安装 # 安装编译工具链(如g)和依赖库 sudo …

【NLP 50、损失函数 KL散度】

目录 一、定义与公式 1.核心定义 2.数学公式 3.KL散度与交叉熵的关系 二、使用场景 1.生成模型与变分推断 2.知识蒸馏 3.模型评估与优化 4.信息论与编码优化 三、原理与特性 1.信息论视角 ​2.优化目标 3.​局限性 四、代码示例 代码运行流程 核心代码解析 抵达梦想靠的不是狂热…

使用QT画带有透明效果的图

分辨率&#xff1a;24X24 最大圆 代码: #include <QApplication> #include <QImage> #include <QPainter>int main(int argc, char *argv[]) {QImage image(QSize(24,24),QImage::Format_ARGB32);image.fill(QColor(0,0,0,0));QPainter paint(&image);…

【Unity网络编程知识】使用Socket实现简单TCP通讯

1、Socket的常用属性和方法 创建Socket TCP流套接字 Socket socketTcp new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 1.1 常用属性 1&#xff09;套接字的连接状态 socketTcp.Connected 2&#xff09;获取套接字的类型 socketTcp.So…

青少年编程与数学 02-013 初中数学知识点 02课题、概要

青少年编程与数学 02-013 初中数学知识点 02课题、概要 一、数与代数二、图形与几何三、统计与概率四、综合与实践五、课程理念与目标 根据2022年版义务教育数学课程标准&#xff0c;初中数学知识点可以总结为以下四大领域。 一、数与代数 数与式 有理数与实数&#xff1a;理解…

深入探索 libarchive

深入探索 libarchive&#xff1a;跨平台归档处理的终极解决方案 一、背景与历史沿革 1.1 归档处理的演进之路 从1979年tar格式的诞生到现代云存储时代&#xff0c;归档技术经历了四个关键阶段&#xff1a; Unix时代&#xff1a;tar/cpio主导系统备份互联网黎明期&#xff1…

2025最新“科研创新与智能化转型“暨AI智能体开发与大语言模型的本地化部署、优化技术实践

第一章、智能体(Agent)入门 1、智能体&#xff08;Agent&#xff09;概述&#xff08;什么是智能体&#xff1f;智能体的类型和应用场景、典型的智能体应用&#xff0c;如&#xff1a;Google Data Science Agent等&#xff09; 2、智能体&#xff08;Agent&#xff09;与大语…

Yolo_v8的安装测试

前言 如何安装Python版本的Yolo&#xff0c;有一段时间不用了&#xff0c;Yolo的版本也在不断地发展&#xff0c;所以重新安装了运行了一下&#xff0c;记录了下来&#xff0c;供参考。 一、搭建环境 1.1、创建Pycharm工程 首先创建好一个空白的工程&#xff0c;如下图&…

时尚界正在试图用AI,创造更多冲击力

数字艺术正以深度融合的方式&#xff0c;在时尚、游戏、影视等行业实现跨界合作&#xff0c;催生了多样化的商业模式&#xff0c;为创作者和品牌带来更多机会&#xff0c;数字艺术更是突破了传统艺术的限制&#xff0c;以趣味触达用户&#xff0c;尤其吸引了年轻一代的消费群体…

蓝桥杯省模拟赛 01串个数

问题描述 请问有多少个长度为 24 的 01 串&#xff0c;满足任意 5 个连续的位置中不超过 3 个位置的值为 1。 所有长度为24的01串组合有2*24种 思路&#xff1a;遍历所有长度为24的01串组合&#xff0c;选择出符合题意的 #include<iostream> #include<cmath> us…

【软考备考】系统架构设计论文完整范文示例

本文由AI辅助创造 题目:基于微服务与云原生的智慧政务平台架构设计与实践 摘要(约300字) 本文以某省级智慧政务平台建设项目为背景,针对传统政务系统存在的"信息孤岛"、扩展性差、维护成本高等问题,提出了一套基于微服务与云原生技术的解决方案。通过领域驱动…

数据库原理及应用mysql版陈业斌实验二

&#x1f3dd;️专栏&#xff1a;Mysql_猫咪-9527的博客-CSDN博客 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 实验二单表查询 1.实验数据如下 student 表&#xff08;学生表&#…

SDL —— 将sdl渲染画面嵌入Qt窗口显示(附:源码)

🔔 SDL/SDL2 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 效果 使用QWidget加载了SDL的窗口,渲染器使用硬件加速跑GPU的。支持Qt窗口缩放或显示隐藏均不影响SDL的图像刷新。   操作步骤 1、在创建C++空工程时加入SDL,引入头文件时需…

C语言之链表增删查改

1.知识百科 链表&#xff08;Linked List&#xff09;是计算机科学中一种基础的数据结构&#xff0c;通过节点&#xff08;Node&#xff09;的链式连接来存储数据。每个节点包含两部分&#xff1a;存储数据的元素和指向下一个节点的指针&#xff08;单链表&#xff09;或前后两…