Promise.all和 race

Promise.all()

  1. all方法可以完成并行任务, 它接收一个数组,数组的每一项都是一个promise对象。
  2. 返回值:
  • 成功时:当数组中所有的promise的状态都达到resolved的时候,就返回包含所有 Promise 结果的数组,并且是按照传递过来的顺序,但是注意的是他们执行的顺序并不是按照顺序的
  • 失败时:传递的任何一个 Promise 被拒绝,返回的 Promise 对象将被拒绝,并将首个被拒绝的 Promise 的结果作为其值。
  1. 当遇到发送多个请求并根据请求顺序获取和使用数据的场景,就可以使用 Promise.all 来解决
let promise1 = new Promise((resolve, reject) => {setTimeout(() => {resolve(1);}, 2000);
});
let promise2 = new Promise((resolve, reject) => {setTimeout(() => {resolve(2);}, 1000);
});
let promise3 = new Promise((resolve, reject) => {setTimeout(() => {resolve(3);}, 3000);
});
Promise.all([promise1, promise2, promise3]).then((res) => {console.log(res);//结果为:[1,2,3]
});
const promise1 = new Promise((resolve, reject) => {setTimeout(() => {console.log("进入promise1");resolve("Promise 1 resolved");}, 1000);});const promise2 = new Promise((resolve, reject) => {setTimeout(() => {console.log("进入promise2");resolve("Promise 2 resolved");}, 2000);});const promise3 = new Promise((resolve, reject) => {setTimeout(() => {console.log("进入promise3");reject("Promise 3 rejected");}, 1500);});Promise.all([promise1, promise2, promise3]).then((results) => {console.log("All promises resolved:", results);}).catch((error) => {console.error("At least one promise rejected:", error);});

在这里插入图片描述
从这个输出结果可以看出

  1. 在遇到reject就立即去执行then方法了,不会等到剩下的promise对象执行完;
  2. 即使遇到reject,之后还没执行完的promise会继续执行,只是不会再进入到then中了

如果第三个改成 resolve("Promise 3 resolve"),输出结果:
在这里插入图片描述

当然,失败的时候也可以把catch用then的第二个参数代替:
在这里插入图片描述
输出结果:(这里是console.log,所以和 console.error的输出形式不太一样,但是功能是一样的
在这里插入图片描述

Promise.race()

race方法和all一样,接受的参数是一个每项都是promise的数组,但是与all不同的是,哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。如果第一个promise对象状态变成resolved,那自身的状态变成了resolved;反之第一个promise变成rejected,那自身状态就会变成rejected

  • 使用场景:当你想在多个 Promise 中的任何一个完成时执行某个操作时,可以使用 Promise.race
 let promise1 = new Promise((resolve, reject) => {setTimeout(() => {console.log("进入promise1了");reject(1);}, 2000);});let promise2 = new Promise((resolve, reject) => {setTimeout(() => {console.log("进入promise2了");resolve(2);}, 1000);});let promise3 = new Promise((resolve, reject) => {setTimeout(() => {console.log("进入promise3了");resolve(3);}, 3000);});Promise.race([promise1, promise2, promise3]).then((res) => {console.log(res);//结果:2},(rej) => {console.log(rej);});

在这里插入图片描述

  • 有一个promise进入race的成功回调后,其余函数继续执行,只是将不会再进入race的任何回调

那么race方法有什么实际作用呢?当要做一件事,超过多长时间就不做了,可以用这个方法来解决:

Promise.race([promise1, timeOutPromise(5000)]).then((res) => {});

补充:
Promise.allPromise.race 是 JavaScript 中用于处理多个 Promise 对象的两个常见方法。

  1. Promise.all:
    • 使用场景:当你有多个 Promise 需要同时执行,并且你想等待它们全部完成后再执行下一步操作时,可以使用 Promise.all
    • 行为:Promise.all 接收一个 Promise 数组作为参数,并返回一个新的 Promise 对象。该新 Promise 对象在所有传入的 Promise 对象都成功完成时才会被标记为成功,其结果是一个包含所有 Promise 结果的数组;如果任何一个 Promise 被拒绝(rejected),则返回的 Promise 会立即被拒绝,并且会带有第一个被拒绝的 Promise 的原因。
const promises = [promise1, promise2, promise3];
Promise.all(promises).then(results => {// 所有 promise 都成功,results 是一个包含所有 promise 结果的数组}).catch(error => {// 任何一个 promise 被拒绝时执行});
  1. Promise.race:
    • 使用场景:当你想在多个 Promise 中的任何一个完成时执行某个操作时,可以使用 Promise.race
    • 行为:Promise.race 也接收一个 Promise 数组作为参数,并返回一个新的 Promise 对象。该新 Promise 对象会在数组中的任何一个 Promise 被解决(resolved)时被解决,并且结果与第一个完成的 Promise 的结果相同,无论是成功还是失败。
const promises = [promise1, promise2, promise3];
Promise.race(promises).then(result => {// 第一个完成的 promise 成功或失败时执行}).catch(error => {// 第一个完成的 promise 失败时执行});

总的来说,Promise.all 用于等待多个 Promise 都完成,而 Promise.race 则用于等待多个 Promise 中的第一个完成。

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

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

相关文章

Vue3实战笔记(15)—pinia基本用法--State

文章目录 前言一、pinia的state二、修改数据的几种方法:1.直接修改2.批量修改3.重置 state4.替换 state 三 补充知识总结 前言 接上文,在大多数情况下,state 都是你的 store 的核心。人们通常会先定义能代表他们 APP 的 state。在 Pinia 中&…

Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV

OpenCV是大型的Third party 计算机视觉库,在开发中会经常用到,本篇记录一下 在Ubuntu系统上安装和配置OpenCV,并使用C/C调用OpenCV 关于VS Code配置C/C开发环境的部分,见之前的博文 Linux/Ubuntu系统下使用VS Code配置C/C开发环境…

shell进阶之计算编译前后时间(十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

【linux】隐藏文件,vim 或 gedit 打开隐藏文件

用la查看隐藏文件 la 用ls查看正常文件 ls隐藏文件在Linux和其他类UNIX系统中以.开头命名,它们通常用于存储用户或系统的配置信息、缓存数据或其他不想让用户直接看到的文件。以下是您提到的一些隐藏文件及其典型用途: .bashrc: 这是Bourne Again SHe…

FPGA架构入门

一、引言 刚学习FPGA的时候,有一大堆不知名的名词,即使查它的含义,但还是不明白它是做什么的,用在哪些地方,为什么要用,导致即使接受到大量信息,也无法理解,最根本的原因&#xff0…

深度学习实战:定制化智能狗门的迁移学习之旅

引言 在深度学习领域,迁移学习是一种强大的技术,它允许我们利用预训练模型的知识来解决新的问题。在本博客中,我们将通过一个有趣的项目——为前美国总统奥巴马的宠物狗Bo定制智能狗门——来探索迁移学习的实际应用。 迁移学习简介 迁移学…

Spring 类加载器

AbstractBeanFactory --> ClassUtils.getDefaultClassLoader()->( Thread.currentThread().getContextClassLoader() or ClassLoader.getSystemClassLoader() ) --> AppClassLoader (默认情况下会拿到) Nullable public static ClassLoader getDefaultClassLoader() …

Fifteen Day 2024年5月11日

Dense adj.密集的 稠密的 浓密的 茂密的 Dense crowd. 密集的人群。 Crowd n.人群 群众 一群 v.聚集 挤满 Shanghai has a dense population. 上海的人口密度很大. Population n.人口 Pass through a dense jungle. 穿过一片茂密的丛林。 Through prep.穿越 越过 从头到…

代码+视频,R言语处理数据中的缺失值

在SCI论文中,我们不可避免和缺失数据打交道,特别是在回顾性研究,对于缺失的协变量(就是混杂因素),我们可以使用插补补齐数据,但是对于结局变量和原因变量的缺失,我们不能这么做。部分…

mysql设置远程访问权限,允许其他IP访问

文章目录 更改mysql配置文件登录mysql 更改mysql配置文件 查找.ini或者.cnf文件 更改bind-address为0.0.0.0 [mysqld] character-set-serverutf8mb4 bind-address0.0.0.0 default-storage-engineINNODB [mysql] default-character-setutf8mb4 [client] default-character-s…

数据分析思维——数据埋点笔记,以电商为例

数据埋点 数据分析前提是有数据,数据从哪里来,要选择采集哪些数据都需要考虑。如某些app上的商品推荐,是基于哪些信息来预判的呢?因此作为数据分析师有必要系统的了解用户行为到用户数据的整个过程 何为数据埋点 每当用户在客户端…

【GlobalMapper精品教程】079:投影坐标系转地理坐标系(UTM转WGS1984/2000)

文章目录 一、矢量UTM转WGS1984/20001. UTM转WGS19842. UTM转CGCS2000二、栅格UTM转WGS1984/2000一、矢量UTM转WGS1984/2000 加载配套实验数据(data079.rar)中的矢量数据,如下所示: 查看源坐标系:双击图层的,图层投影选项卡,为UTM投影,Zone48N。 设置系统坐标系:点击…

C#【进阶】泛型

1、泛型 文章目录 1、泛型1、泛型是什么2、泛型分类3、泛型类和接口4、泛型方法5、泛型的作用思考 泛型方法判断类型 2、泛型约束1、什么是泛型2、各泛型约束3、约束的组合使用4、多个泛型有约束思考1 泛型实现单例模式思考2 ArrayList泛型实现增删查改 1、泛型是什么 泛型实现…

nowcoder——回文结构

链表的回文结构_牛客题霸_牛客网 (nowcoder.com) 我们来分析该题:我们首先要清楚什么是回文结构?其实就是对称结构。如果一个链表呈对称结构就说明该链表具有回文结构。 下面给上一些例子: 那我们怎么判断该链表是否属于回文结构呢&#xf…

电影评分和评论抓取

要从电影评分⽹站抓取电影的评分和⽤⼾评论,可以考虑使⽤BeautifulSoup和requests库解析⽹⻚内容。不过,实际操作中,针对特定⽹站的结构可能会有所不同,这⾥将给出⼀个基础的⽰例, 演⽰如何从⼀个假设的⽹站中抓取信息…

Python彻底解决TypeError的问题

今天看到一个问题: TypeError: int() argument must be a string, a bytes-like object or a number, not list 代码是这样的: id int(os.path.split(imagePath)[1].split(.)[0]) 其实这个提示已经非常明显了,百度翻译过来就是&#xff1a…

对Promise的理解

Promise的含义 Promise是ES6引入的JS中进行异步编程的新解决方案。 它是一个对象, 可以获取异步操作的消息, 它的出现大大改善了异步编程的困境, 避免了地狱回调,它比传统的解决方案回调函数和事件更合理和更强大。 Promise的实…

[BJDCTF2020]ZJCTF,不过如此 1

涉及&#xff1a;php的伪协议、preg_replace函数的漏洞和正则表达式的运用。 解题步骤 <?phperror_reporting(0); $text $_GET["text"]; $file $_GET["file"]; if(isset($text)&&(file_get_contents($text,r)"I have a dream"))…

zookeeper安装集群模式

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 ZooKeeper是一个分…

梦幻西游全新变现,蓝海热门玩法,小白一部手机可操作,日入2000+

亲爱的朋友们&#xff0c;你们好&#xff01;今天我要给大家分享一个热门、可行的网络赚钱项目——梦幻西游全新变现&#xff0c;蓝海热门玩法&#xff0c;小白一部手机可操作&#xff0c;日入2000。 这个项目不需要花冤枉钱&#xff0c;也是我自己实操过的&#xff0c;非常可…