Promise.all()与Promise.allSettled()和Promise.race() 有什么区别与联系

ops/2025/1/7 6:16:11/

在这里插入图片描述
Promise.all()与Promise.allSettled()和Promise.race() 有什么区别与联系

Promise.all(), Promise.allSettled(), 和 Promise.race() 都是处理多个 Promise 对象的方法,但它们各自的行为和用途有所不同。

Promise.all()
Promise.all() 方法接受一个可迭代对象(如数组)作为参数,该对象中的每个成员都是一个 Promise。它返回一个新的 Promise 实例,这个实例在所有输入的 Promise 都成功(resolved)后才解析,并且解析值是一个包含所有输入 Promise 解析值的数组。

如果输入的任何一个 Promise 失败(rejected),那么 Promise.all() 返回的 Promise 会立即失败,并且失败的原因是第一个失败的 Promise 的原因。

示例:

javascript">const promise1 = Promise.resolve(3);
const promise2 = Promise.reject(new Error('Promise Error'));
const promise3 = Promise.resolve(7);Promise.all([promise1, promise2, promise3]).then(values => console.log(values)).catch(error => console.error(error));
// 输出: Error: Promise Error

Promise.allSettled()
Promise.allSettled() 类似于 Promise.all(),它也接受一个包含多个 Promise 的可迭代对象。但是,即使其中的一个或多个 Promise 被拒绝,Promise.allSettled() 也会等待所有的 Promise 完成,并返回一个包含每个 Promise 的最终状态的对象数组。

每个对象都有一个 status 属性,表示 Promise 的状态(“fulfilled” 或 “rejected”),以及一个 value 或 reason 属性,分别对应于 fulfilled 或 rejected 的结果。

示例:

javascript"> const promise1 = Promise.resolve(3);
const promise2 = Promise.reject(new Error('Promise Error'));
const promise3 = Promise.resolve(7);Promise.allSettled([promise1, promise2, promise3]).then(results => {results.forEach(result => {console.log(`${result.status}: ${result.value !== undefined ? result.value : result.reason}`);});});
// 输出:
// fulfilled: 3
// rejected: Error: Promise Error
// fulfilled: 7

Promise.race()

Promise.race() 接受一个可迭代对象,其中每个成员也是一个 Promise。它返回一个新的 Promise,这个 Promise 会在可迭代对象中的任何一个 Promise 解析或拒绝时立即解析或拒绝。换句话说,Promise.race() 返回的 Promise 会被第一个完成的 Promise 的结果所决定。

javascript">const promise1 = new Promise(resolve => {setTimeout(() => resolve('first'), 1000);
});
const promise2 = new Promise(resolve => {setTimeout(() => resolve('second'), 500);
});Promise.race([promise1, promise2]).then(value => {console.log(value); // 输出: 'second'
});

总结

  • Promise.all(): 所有输入的 Promise 成功后才成功,任意一个失败则立即失败
  • Promise.allSettled(): 等待所有输入的 Promise 完成,无论成功还是失败,并返回一个包含所有状态的对象数组。
  • Promise.race(): 返回第一个完成的 Promise 的结果,无论成功还是失败。

http://www.ppmy.cn/ops/147826.html

相关文章

下载word报表

1.引入依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.5</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-oo…

jmeter分布式启动

https://www.cnblogs.com/qtclm/p/11082081.html 1、代理机&#xff1a;输入“ipconfig”&#xff0c;找到IP地址&#xff0c;在Jmeter/bin/jmeter.properties设置remote host 启动jmeter server 1、控制机&#xff1a;输入“ipconfig”&#xff0c;找到IP地址&#xff0c;在J…

List-顺序表--1

目录 1、List介绍 2、线性表 3、顺序表 4、实现自己的顺序表 4.1、display方法 4.2、add方法 4.3、contains方法 4.4、indexOf方法 4.5、get方法 4.6、set方法 4.7、remove方法 4.8、size方法 4.9、clear方法 1、List介绍 List是一个接口&#xff0c;继承自Collec…

HTTP vs HTTPS

HTTP 协议 HTTP 协议介绍 HTTP 协议&#xff0c;全称超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff09;。顾名思义&#xff0c;HTTP 协议就是用来规范超文本的传输&#xff0c;超文本&#xff0c;也就是网络上的包括文本在内的各式各样的消息&#xff0c;具…

【数据分析实战】24年T4某二手车交易平台数据分析

文章目录 引言数据概述与处理数据特征介绍数据预处理 数据分析1. 价格与折旧率分析折旧率分析计算折旧率 可视化 2. 品牌构成分析品牌分布可视化 3. 地域分布与市场分析城市交易分布可视化 4. 车龄对价格的影响车龄与价格的关系可视化 主要发现写在最后 引言 二手车市场近年来…

实时记录和查看Apache 日志

Apache 是一个开源的、广泛使用的、跨平台的 Web 服务器&#xff0c;保护 Apache Web 服务器平台在很大程度上取决于监控其上发生的活动和事件&#xff0c;监视 Apache Web 服务器的最佳方法之一是收集和分析其访问日志文件。 Apache 访问日志提供了有关用户如何与您的网站交互…

[读书日志]8051软核处理器设计实战(基于FPGA)第三篇:8051 keil编程配置 C语言开发流程 中断程序实例

第一篇https://blog.csdn.net/m0_74021449/article/details/144796689 第二篇https://blog.csdn.net/m0_74021449/article/details/144813103 3.8051中断与keil开发流程 3.1 keil的下载与概述 关于keil&#xff0c;大家都并不陌生&#xff0c;它是开发51单片机和ARM架构的32…

enzymejest TDD与BDD开发实战

一、前端自动化测试需要测什么 1. 函数的执行逻辑&#xff0c;对于给定的输入&#xff0c;输出是否符合预期。 2. 用户行为的响应逻辑。 - 对于单元测试而言&#xff0c;测试粒度较细&#xff0c;需要测试内部状态的变更与相应函数是否成功被调用。 - 对于集成测试而言&a…