首页 > 其他分享 >给你一个promise数组,我需要并行执行,并且数组里面所有promise全部抛出错误之后,才抛出错误,该怎么做

给你一个promise数组,我需要并行执行,并且数组里面所有promise全部抛出错误之后,才抛出错误,该怎么做

时间:2024-09-11 15:04:33浏览次数:11  
标签:抛出 rejected fulfilled promise 数组 allSettled

今天面试,遇到如标题这么一个问题,真的给我问懵逼了,一开始想说使用promise.all,但是不行,因为promise.all只要有一个抛出错误了,整个promise.all就全部失败了。当时给我问的支支吾吾的打答不出来,并且还需要并行执行,想破头了都想不出来。后面回来重新学习ECMAScript才发现,使用一个API,promise.allSettled就可以了,下面我们一起学习学习promise.allSettled。

promise.allSettled和promise.all一样也是接受一个数组。不过它会等待数组里的所有promise全部都发生状态变更(不管是fulfiled还是rejected)后自己本身才发生状态变更。该方法返回的promise实例,状态总是fulfilled。

let allPromise = Promise.allSettled([Promise.resolve(42), Promise.resolve(-1)]).then(result => {
    console.log(resules)
})
// [
//    { status: 'fulfilled', value: 42 },
//    { status: 'rejected', reason: -1 }
// ]

如上,返回一个数组,数组里面包括每一个promise的状态status和值,如果成功就是value属性,如果失败就是reason属性。

其实还有个promise.any也可以实现,any和all刚好相反,它是只要有一个promise的状态变为fulfilled,整个返回的promise实例就都变成fulfilled了。只有当全部promise都rejected之后,整个promise实例才会rejected。所以我们可以在any的catch方法里面实现标题所述的问题。

标签:抛出,rejected,fulfilled,promise,数组,allSettled
From: https://www.cnblogs.com/yaoyu7/p/18408256

相关文章

  • Java数组篇[10]:数组的常见应用场景
    哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Jav......
  • 贪心算法day28|买卖股票的最佳时机、55. 跳跃游戏、1005. K 次取反后最大化的数组和
    贪心算法day28|买卖股票的最佳时机、55.跳跃游戏、1005.K次取反后最大化的数组和122.买卖股票的最佳时机II55.跳跃游戏1005.K次取反后最大化的数组和122.买卖股票的最佳时机II给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一......
  • Python Numpy布尔数组在数据分析中的应用
    大家好,在数据分析和科学计算中,布尔数组是一个非常重要的工具,它可以帮助我们进行数据的筛选、过滤和条件判断。Python的Numpy库提供了丰富的布尔运算功能,能够高效地对数据进行处理。本文将深入探讨Numpy中的布尔数组,介绍布尔运算和布尔索引的使用方法,并通过具体的示例代码展示其......
  • 209. 长度最小的子数组
    滑动窗口!! classSolution{public:intminSubArrayLen(inttarget,vector<int>&nums){intleft=0,right=0,sum=nums[0];intminLength=INT_MAX;while(left<=right&&right<nums.size()){......
  • 在Vue 3中优化异步数据加载:利用`onMounted`与`Promise.all`
    在Vue3中优化异步数据加载:利用onMounted与Promise.all在构建现代Web应用时,异步数据加载是不可或缺的一部分。Vue3的CompositionAPI通过提供onMounted生命周期钩子和Promise.all方法,为我们提供了一种高效且优雅的方式来处理这种需求。本文将深入探讨如何在Vue3中利用这......
  • 1146. 快照数组
    题目链接1146.快照数组思路哈希+二分法题解链接记录修改历史:哈希表+二分查找(Python/Java/C++/Go/JS/Rust)关键点理解题意:查询时要找到<=snap_id的最后一次修改记录时间复杂度\(O(\logn)\)空间复杂度\(O(n)\)代码实现:classSnapshotArray:de......
  • 树状数组求区间最大小值
    constintN=5e5+5;constintINF=0x3f3f3f3f;intn,q;inta[N],trmx[N],trmn[N];//将原来的累加改为求最值voidadd(intx,intk){while(x<=n){trmx[x]=max(trmx[x],k);trmn[x]=min(trmn[x],k);x+=lowbit(x);}}//区间查询最大/小值......
  • 基于数组的循环队列
    基于数组的循环队列关键点在于:当元素总数超过队列长度后,出队、入队等行为如何避免数组越界问题。环绕数组的逻辑结构确实可以类比时钟,当指针走到最后一个刻度(比如12小时制的12点),再往前走时,指针会回到最开始的刻度(即1点),而不是继续前进到一个不存在的位置。 以12小时制时钟为......
  • 力扣热题100 - 二叉树:将有序数组转换为二叉搜索树
    题目描述:题号:108给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。解题思路:思路一:中序构建二叉树选择根节点:首先,选择数组的中间元素作为根节点。这样做可以确保生成的二叉搜索树尽可能平衡。递归构建子树:将数组分......
  • LeetCode之数组/字符串
    88.合并两个有序数组classSolution{publicvoidmerge(int[]nums1,intm,int[]nums2,intn){//这个循环将nums2中的元素逐个复制到nums1中从索引m开始的位置for(inti=0;i<n;i++){nums1[i+m]=nums2[i];......