【JS】期约的Promise.all()和 Promise.race()区别
概述
Promise.all() 和 Promise.race() 都是 JavaScript 中处理多个异步操作的 Promise 方法,但它们的行为和返回结果有所不同。
Promise.all()和Promise.race()
1. Promise.all()
Promise.all() 接受一个由多个 Promise 实例组成的可迭代对象(例如数组),并返回一个新的 Promise。当所有传入的 Promise 都成功解决时,Promise.all() 返回一个新的 Promise,该 Promise 的结果是所有输入 Promise 的结果组成的数组;如果任何一个输入的 Promise 被拒绝(即 reject),Promise.all() 会立即返回一个拒绝的 Promise,并且拒绝的原因是第一个被拒绝的 Promise 的原因。
[特点]
- 必须等待所有 Promise 都成功,或者其中一个 Promise 被拒绝,才会返回结果。
- 如果其中一个 Promise 被拒绝,
Promise.all()会立即返回拒绝的原因,不会继续等待其他 Promise。
示例:
const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) => setTimeout(resolve, 100, 'foo'));
const promise3 = Promise.resolve(42);Promise.all([promise1, promise2, promise3]).then((values) => {console.log(values); // [3, "foo", 42]}).catch((error) => {console.log(error); // 如果有一个Promise被拒绝,会进入catch});
如果其中一个 Promise 被拒绝:
const promise1 = Promise.resolve(3);
const promise2 = Promise.reject("Error!");Promise.all([promise1, promise2]).then((values) => {console.log(values);}).catch((error) => {console.log(error); // "Error!"});
2. Promise.race()
Promise.race() 也是接受一个包含多个 Promise 的可迭代对象,并返回一个新的 Promise。不同的是,Promise.race() 只会返回第一个解决或第一个被拒绝的 Promise 的结果。不管其他 Promise 是否已经解决或拒绝,Promise.race() 只关注第一个完成的 Promise。
[特点]
- 返回的是第一个解决(
resolve)或第一个拒绝(reject)的 Promise 的结果。 - 无论其他 Promise 是否解决或拒绝,
Promise.race()都会立即返回第一个完成的结果。
示例:
const promise1 = new Promise((resolve, reject) => setTimeout(resolve, 500, 'foo'));
const promise2 = new Promise((resolve, reject) => setTimeout(resolve, 100, 'bar'));Promise.race([promise1, promise2]).then((value) => {console.log(value); // "bar" (因为 promise2 先完成)}).catch((error) => {console.log(error);});
如果第一个拒绝的 Promise 被触发:
const promise1 = new Promise((resolve, reject) => setTimeout(resolve, 500, 'foo'));
const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'error'));Promise.race([promise1, promise2]).then((value) => {console.log(value);}).catch((error) => {console.log(error); // "error" (因为 promise2 先拒绝)});
区别总结:
| 特性 | Promise.all() | Promise.race() |
|---|---|---|
| 返回值 | 当所有 Promise 成功时返回一个数组,包含所有 Promise 的结果。如果有任何一个 Promise 被拒绝,立即返回拒绝的原因。 | 返回第一个解决或拒绝的 Promise 的结果,忽略其他 Promise 的状态。 |
| 成功时的返回 | 所有 Promise 的结果组成一个数组。 | 第一个完成的 Promise 的结果。 |
| 失败时的返回 | 如果任何一个 Promise 被拒绝,返回拒绝的原因。 | 第一个被拒绝的 Promise 的拒绝原因。 |
| 适用场景 | 需要所有 Promise 完成后才能继续处理。 | 只关心第一个完成的 Promise,不关心其余 Promise。 |
应用场景
-
Promise.all()适用于当多个异步任务必须都成功完成后才能继续处理后续操作的情况。例如,加载多个资源(如图片、脚本文件等)并在所有资源加载完成后再显示页面。 -
Promise.race()适用于当多个异步任务中只关心哪个任务最先完成的情况。例如,网络请求超时处理,或者多个可能的 API 请求,哪一个先返回就用哪个结果。
相关文章:
【JS】期约的Promise.all()和 Promise.race()区别
概述 Promise.all() 和 Promise.race() 都是 JavaScript 中处理多个异步操作的 Promise 方法,但它们的行为和返回结果有所不同。 Promise.all()和Promise.race() 1. Promise.all() Promise.all() 接受一个由多个 Promise 实例组成的可迭代对象(例如数…...
使用 RxJS 库实现响应式编程
什么是 RxJS? RxJS(Reactive Extensions for JavaScript)是一个用于响应式编程的库,它使得处理异步数据流变得更加简单和优雅。通过使用 Observables(可观察对象),你可以轻松地处理事件、HTTP …...
ARP攻击的原理和实现 (网络安全)
ARP攻击的原理和实现 ARP(Address Resolution Protocol,地址解析协议)是一种网络协议,用于在局域网内将IP地址映射到MAC地址。在以太网中,设备通过广播ARP请求来查询目标IP地址对应的MAC地址,从而建立通信…...
chatgpt model spec 2024
概述 这是模型规范的初稿,该文档规定了我们在OpenAI API和ChatGPT中的模型的期望行为。它包括一组核心目标,以及关于如何处理冲突目标或指令的指导。 我们打算将模型规范作为研究人员和数据标注者创建数据的指南,这是一种称为从人类反馈中进…...
单片机-LED实验
1、51工程模版 #include "reg52.h" void main(){ while(1){ } } 2、LED灯亮 #include "reg52.h" sbit LED1P2^0; void main(){ while(1){ LED10; } } 3、LED闪烁 #include "reg52.h" sbit LED1P2^0; //P2大…...
QILSTE H10-C321HRSYYA高亮红光和黄光LED灯珠
在深入探讨H10-C321HRSYYA型号的复杂特性之前,我们首先需要明确其基本参数和功能。这款型号的LED产品以其独特的双色设计和卓越的性能在众多同类产品中脱颖而出。其外观尺寸为3.0x1.0x2.1mm,采用高亮黄光和红光的双色组合,赋予了其在多种应用…...
Appium(一)--- 环境搭建
一、Android自动化环境搭建 1、JDK 必须1.8及以上(1) 安装:默认安装(2) 环境变量配置新建JAVA_HOME:安装路径新建CLASSPath%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar在path中增加:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(3) 验证…...
量子力学复习
黑体辐射 热辐射 绝对黑体: (辐射能力很强,完全的吸收体,理想的发射体) 辐射实验规律: 温度越高,能量越大,亮度越亮 温度越高,波长越短 光电效应 实验装置…...
22408操作系统期末速成/复习(考研0基础上手)
第一部分:计算题: 考察范围:(标红的是重点考) 第一章:CPU利用率: 第二章: 进程调度算法(需要注意不同调度算法的优先级和题目中给出的是否可以抢占【分为可抢占和不可抢占ÿ…...
两种分类代码:独热编码与标签编码
目录 一、说明 二、理解分类数据 2.1 分类数据的类型:名义数据与序数数据 2.2 为什么需要编码 三、什么是独热编码? 3.1 工作原理:独热编码背后的机制 3.2 应用:独热编码的优势 四、什么是标签编码? 4.1 工作原理&…...
51单片机——共阴数码管实验
数码管中有8位数字,从右往左分别为LED1、LED2、...、LED8,如下图所示 如何实现点亮单个数字,用下图中的ABC来实现 P2.2管脚控制A,P2.3管脚控制B,P2.4管脚控制C //定义数码管位选管脚 sbit LSAP2^2; sbit LSBP2^3; s…...
【开源社区openEuler实践】rust_shyper
title: 探索 Rust_Shyper:系统编程的新前沿 date: ‘2024-12-30’ category: blog tags: Rust_ShyperRust 语言系统编程性能与安全 sig: Virt archives: ‘2024-12’ author:way_back summary: Rust_Shyper 作为基于 Rust 语言的创新项目,在系统编程领域…...
LiteFlow 流程引擎引入Spring boot项目集成pg数据库
文章目录 官网地址简要项目引入maven 所需jar包配置 PostgreSQL 数据库表使用LiteFlow配置 yml 文件通过 代码方式使用 liteflow数据库sql 数据在流程中周转 官网地址 https://liteflow.cc/ 简要 如果你要对复杂业务逻辑进行新写或者重构,用LiteFlow最合适不过。…...
阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance)
阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance) 都是交流电路中描述电流和电压之间关系的参数,但它们的含义、单位和作用不同。下面是它们的定义和区别: …...
旷视科技Java面试题及参考答案
讲一下进程间的通讯方式(如管道、消息队列、共享内存、Socket 等),各有什么特点? 管道(Pipe) 管道是最早出现的进程间通信方式之一,主要用于具有亲缘关系(父子进程)的进程之间通信。 特点: 半双工通信,数据只能单向流动。例如,在一个简单的父子进程通信场景中,父进…...
reactor的Hooks.enableAutomaticContextPropagation();不生效解决方案
1. pom中需要先增加如下的内容 <dependency><groupId>io.micrometer</groupId><artifactId>context-propagation</artifactId><version>1.1.2</version> </dependency> 2. 注意,要看idea是否将context-propagati…...
DS复习提纲模版
数组的插入删除 int SeqList::list_insert(int i, int item) { //插入if (i < 1 || i > size 1 || size > maxsize) {return 0; // Invalid index or list is full}for (int j size-1; j > i-1; j--) { // Shift elements to the rightlist[j1] list[j];}li…...
蓝桥杯备赛:C++基础,顺序表和vector(STL)
目录 一.C基础 1.第一个C程序: 2.头文件: 3.cin和cout初识: 4.命名空间: 二.顺序表和vector(STL) 1.顺序表的基本操作: 2.封装静态顺序表: 3.动态顺序表--vector:…...
【LLM】概念解析 - Tensorflow/Transformer/PyTorch
背景 本文将从算法原理、适用范围、强项、知名大模型的应用、python 调用几个方面,对深度学习框架 TensorFlow、PyTorch 和基于深度学习的模型 Transformer 进行比较。主要作用是基础概念扫盲。 一、 算法原理对比 Transformer Transformer 是一种基于深度学习的…...
对一段已知行情用python中画出K线图~
1. 已知行情: 2024/09/05 ~ 2025/1/3 date open high low close 0 2024-09-05 2785.2635 2796.0186 2777.4710 2788.3141 1 2024-09-06 2791.7645 2804.0932 2765.6394 2765.8066 2 2024-09-09 2754.7237 2756.5560 2726.9667 2736.…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
