Promise.all如果其中之一失败,怎么能够拿到其他成功的结果

Promise.all 的基础介绍

作用:Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。

参数:由多个Promise实例组成的数组

const p = Promise.all([p1, p2, p3]);

p的状态由p1、p2、p3决定,分成两种情况。

(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。

(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

Demo–Promise.all如果其中之一失败,怎么能够拿到其他成功的结果

该实例的最终结果被Promise.all的catch方法捕获

如果f3没有自己的catch方法,就会调用Promise.all()的catch方法。

let f1 = new Promise((resolve,reject)=> {setTimeout(()=> {resolve('f11111')},2000)
})
let f2 = new Promise((resolve,reject)=> {setTimeout(()=> {resolve('f22222')},1000)
})
let f3 = new Promise((resolve,reject)=> {setTimeout(()=> {reject('err-f33333')},3000)})
let a =  [f1,f2,f3]
// promise.all中的异步请求是并发执行的,但是最终的返回结果是按照最初的顺序执行排列好的
Promise.all(a).then(data=> { console.log(data)
}).catch(err=> {console.log('糟糕出错了')
})
//执行结果:糟糕出错了
如果作为参数的 Promise 实例,自己定义了catch方法,那么它一旦被rejected,并不会触发Promise.all()的catch方法。
let f1 = new Promise((resolve,reject)=> {setTimeout(()=> {resolve('f11111')},2000)
})
let f2 = new Promise((resolve,reject)=> {setTimeout(()=> {resolve('f22222')},1000)
})
let f3 = new Promise((resolve,reject)=> {setTimeout(()=> {reject('err-f33333')},3000)}).catch(err=>err)
let a =  [f1,f2,f3]
// promise.all中的异步请求是并发执行的,但是最终的返回结果是按照最初的顺序执行排列好的
Promise.all(a).then(data=> { console.log(data) 
}).catch(err=> {console.log('糟糕出错了')
})
// 执行结果: ['f11111', 'f22222', 'err-f33333']

这个例子中f1,f2会resolved。
f3首先会rejected,但是f3有自己的catch方法,该方法返回的是一个新的Promise 实例, f3指向的实际上是这个实例. 该实例执行完catch方法后,也会变成resolved。 导致Promise.all()方法参数里面的三个实例都会resolved,因此会调用then方法指定的回调函数,而不会调用catch方法指定的回调函数。

参考自ES6-Promise.all

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

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

相关文章

APP自动化之Poco框架

今天给大家介绍一款自动化测试框架Poco,其脚本写法非常简洁、高效,其元素定位器效率更快,其本质基于python的第三方库,调试起来也会非常方便,能够很好的提升自动化测试效率,节省时间。 (一)背景…

如何实现数据通过表格批量导入数据库

文章目录 1. 准备工作2. 创建数据库表3. 编写导入脚本4. 优化和拓展4.1 批量插入的优势4.2 错误处理4.3 数据验证4.4 数据转换 5. 总结 🎉如何实现数据通过表格批量导入数据库 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客&…

创建git仓库

①git init:用于在一个现有的目录中初始化一个新的 Git 仓库。 # 进入你的项目目录,如果你想要在当前目录下初始化 Git 仓库。 git init 这会在当前目录下创建一个名为 .git 的子目录,其中包含 Git 仓库的所有必要文件和目录。(…

初学者必读书籍——两个月速成Python

想学Python的你是不是一直被它生涩难懂的劝退?作为一个自学入门的程序员,依靠这样几本书,两个月就学会了python。不卖关子,我学的就是”python编程三剑客“系列。那么接下来就让我给你介绍介绍吧。 1.《Python编程:从入…

OSG文字-osgText3D(5)

osgText3D 三维立体文字比二维平面文字显示效果更好,相对二维平面文字,它有非常好的立体显示效果。 在实际虚拟现实项目中,过多使用三维立体文字会降低染效率,加重渲染负担,相对平面二维文字,它占用的内存是…

MES系统管理范围及标准

一、计划管理 1.1计划分为:月度计划>周计划>日计划; 1.2MES系统一般都会直接精确到日计划(生产工单及生产指令); 1.3MES系统日计划分为三阶排产方式: 1.3.1日计划直接排到车间,由车间自行安排任务; 1.3.2日计划排到产线或设备,对应的班组长按照计划直接生产; 1.…

掌握Katalon Studio 导入 swagger 接口文档,接口测试效率提升100%

katalon studio大家都已经不陌生了,是一款现在非常主流的自动化测试工具,包括了web、api、APP,甚至PC应用程序都可以使用它来完成自动化测试。 swagger是一款RESTFUL接口的文档在线自动生成软件,swagger是一个规范和完整的框架&a…

asterisk dialplan(extension)学习笔记

列举一些用过的dialplan,记录备忘 exten > 1004,1,Answer();第1步,监听到外部呼入1004这个号码,接听,对方就会看到电话已经接通 exten > 1004,n,Dial(SIP/1004,20,tr);第2步,通过SIP通道,拨打1004这…

Python通过selenium调用IE11浏览器报错解决方法

前提 正常安装Python 工具,selenium 包可以正常导入。IE浏览器驱动 IEDriverServer.exe 已经正确放置到已经添加path目录的文件下。 报错现象: 解决方法 打开浏览器进入 internet 选项 切换到安全页签 ,去除“应用保护模式” 再次调用验证…

C语言——I /深入理解指针(一)

一、内存和地址 1byte(字节) 8bit(比特位) 1KB 1024byte 1MB 1024KB 1GB 1024MB 1TB 1024GB 1PB 1024TB一个比特位可以存放二进制的0/1的一位 ⽣活中我们把⻔牌号也叫地址,在计算机中我们把内存单元的编号也称为…

真菌基因组研究高分策略(一):比较基因组揭示真菌菌丝和多细胞的起源

真菌是陆地和水生生态系统的重要组分,在有机质循环和跨营养级养分流通等过程中发挥着重要作用。随着测序技术的发展,高通量测序揭示了真菌群落巨大的系统发育和功能多样性,高质量真菌基因组的组装已经成为研究菌丝和潜在基因的进化起源的有力…

php利用ZipArchive类实现文件压缩与解压

github项目 1、Linux 安装 nginx 安装zlib库 cd /usr/local/src wget https://zlib.net/current/zlib.tar.gz tar -zxvf zlib.tar.gz cd zlib-1.3 ./configure make && make install 2、zlib的使用 $all_name all.zip;// 创建ZipArchive对象$zip_all new ZipArchi…

国外聊天IM — Sendbird

接⼝⽂档: https://sendbird.com/docs 好久没写文章了 我在官网找到的pom, 下载不下来,git下载下来,打进项目里不能用,就只能用简单的http了 直接上代码,只是简单的调通代码,根据你自己业务改:…

gensim库中word2vec的使用方式

gensim.models中的Word2Vec具体应用,里面的参数的含义以及一般取值 from gensim.models import Word2Vec# 示例文本 sentences [[this, is, a, sample, sentence],[another, example, sentence],[one, more, example]]# 训练 Word2Vec 模型 model Word2Vec(sente…

【c++】——类和对象(下) 万字解答疑惑

作者:chlorine 专栏:c专栏 目录 🚩再谈构造函数 🎓构造函数体赋值 🎓初始化列表 🚩explicit关键字 🚩static成员 🎓概念 面试题:计算创建多少个类对象 🎓特性 【问题】(非)…

智能合约安全漏洞与解决方案

// SPDX-License-Identifier: MIT pragma solidity ^0.7.0;import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.3/contracts/math/SafeMath.sol";/*智能合约安全在智能合约中安全问题是一个头等大事,因为智能合约不像其他语…

android.support.v4.view.ViewPager爆红

android.support.v4.view.ViewPager的地方改成androidx.viewpager.widget.ViewPager

RH850 G3KH异常处理简述

目录 1.概述 2.异常处理后现场恢复 3.异常处理地址识别 4.小结 1.概述 我们首先来看,G3KH的关键寄存器,PSW PSW--Program status word PSW寄存器里有表征程序状态的flag,CPU操作状态的flag。如下 UM---是否是user mode;0--…

golang 添加文字水印并旋转

注意:如水印文字是中文,需要中文字体 字体下载链接:https://fonts.google.com package imgUtilsimport ("golang.org/x/image/font""golang.org/x/image/math/fixed""math""image""image/colo…

【JavaEE】Spring更简单的存储和获取对象(类注解、方法注解、属性注入、Setter注入、构造方法注入)

一、存储Bean对象 在这篇文章中我介绍了Spring最简单的创建和使用:Spring的创建和使用 其中存储Bean对象是这样的: 1.1 配置扫描路径 想要成功把对象存到Spring中,我们需要配置对象的扫描包路径 这样的话,就只有被配置了的包…