当前位置: 首页 > news >正文

前端 Promise 全面深入解析

一、Promise基础概念

1、什么是Promise?
Promise是一个表示异步操作最终完成或失败的对象。它允许你为异步操作的成功结果和失败原因分别绑定相应的处理方法。
2、Promise的三种状态
请添加图片描述

  • pending(等待中): 初始状态,既不是成功,也不是失败
  • fulfilled(已成功): 操作成功完成
  • rejected(已拒绝): 操作失败

状态一旦改变就不可逆:pending → fulfilled 或 pending → rejected

3、创建Promise

const myPromise = new Promise((resolve, reject) => {// 异步操作setTimeout(() => {const success = Math.random() > 0.3;if(success) {resolve("操作成功!");  // 将状态改为 fulfilled} else {rejected("操作失败!");  // 将状态改为 rejected}}, 1000);
});

二、Promise的基本使用

1、处理Promise结果

myPromise.then(result => {console.log("成功", result);}).catch(error => {console.log("失败",  error);	}).finally(() => {console.log("无论成功还是失败都会执行");});

2、Promise链式调用

function asyncOperation(value) {return new Promise((resolve, reject) => {setTimeout(() => {if (value > 0.5) {resolve(value * 100);} else {reject("值太小");}}, 1000);});
}asyncOperation(0.8).then(result => {console.log("第一步结果:", result);return asyncOperation(result / 200); // 返回新 Promise}).then(result => {console.log("第二步结果:", result);return "最终结果: " + result; // 返回普通值}).then(result => {console.log(result);}).catch(error => {console.error("链中任何一步出错:", error);});

三、Promise的静态方法

1、Promise.all()
等待所有Promise完成,或任何一个Promise失败

const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve) => setTimeout(resolve, 100, 'foo'));
const promise3 = fetch('https://api.example.com/data');Promise.all([promise1, promise2, promise3]).then(values => {console.log(values);  // [3, 'foo', Response]}).catch(error => {console.error('有一个Promise失败:', error);	})

2、Promise.race()
返回最先完成或拒绝的Promise的结果

const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject('超时'), 5000)
);const fetchPromise = fetch('https://api.example.com/slow-data');Promise.race([fetchPromise, timeoutPromise]).then(response => {console.log('数据获取成功');	}).catch(error => {console.error('请求超时或失败:', error);});

3、Promise.allSettled()
等待所有Promise完成(无论成功或失败)

const promises = [Promise.resolve('成功'),Promise.reject('失败'),Promise.resolve('另一个成功')
];Promise.allSettled(promises).then(results => {results.forEach((result, index) => {if (result.status === 'fulfilled') {console.log(`Promise 
http://www.dtcms.com/a/349312.html

相关文章:

  • Unity中的特殊文件夹
  • 【Python】在 Pydantic 模型中使用非 Pydantic 定义的类作为模型字段类型
  • Java项目-苍穹外卖_Day2
  • 8 设计URL短链
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(二十) 文件、文件夹选择框、保存文件框
  • qt配置ros2环境,简单版本
  • Rust:变量、常量与数据类型
  • 2025 突出的时序模型
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day13
  • Linux-Redis的安装
  • 第四章:并发编程的基石与高级模式之Select语句与多路复用
  • 【Linux】开发工具命令指南:深度解析Vim的使用操作
  • Allegro17.4导出带有NET的PDF文档及组装样式图
  • MongoDB vs MySQL:NoSQL 和 SQL 的核心区别与适用场景
  • 前端开发:详细介绍npm、pnpm和cnpm分别是什么,使用方法以及之间有哪些关系
  • CPTS-Pressed复现(XML-RPC)
  • Python 面向对象进阶:深入理解封装、继承与多态
  • 【C++】第二十六节—C++11(中) | 右值引用和移动语义(续集)+lambda
  • 验证码流程
  • 【AMBA总线互联IP】
  • 6、RocketMQ消息积压问题如何解决
  • QSpinBox的用法及其使用QSS对其美化
  • 【ElasticSearch】json查询语法和可用的客户端
  • Docker 在线安装 RabbitMQ
  • 开源 C++ QT Widget 开发(五)通讯--串口调试
  • NILMTK(非侵入式负载监测工具包)安装
  • Linux 进阶之性能调优,文件管理,网络安全
  • AI精准种植改写农业格局:亩产量提升18%+水资源利用率提高32%,破解小农户技术门槛难题
  • Linux下usb设备驱动涉及的结构体
  • More Effective C++ 条款06: 区分自增自减操作符的前缀和后缀形式