当前位置:首页 > 科技  > 软件

Promise.all 的异常处理,我希望大家一定要了解一下!

来源: 责编: 时间:2024-03-29 17:17:24 355观看
导读前言大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心背景咱们在开发中,大多数时间都是一个异步操作一个异步操作去执行的,但是有一些特殊情况,需要一股脑去执行多个异步操作,比如

前言

大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心hTs28资讯网——每日最新资讯28at.com

背景

咱们在开发中,大多数时间都是一个异步操作一个异步操作去执行的,但是有一些特殊情况,需要一股脑去执行多个异步操作,比如:hTs28资讯网——每日最新资讯28at.com

  • 多表单校验:只有所有表单都校验通过才能提交
  • 多接口请求:只有所有接口都请求成功才能进行下一步操作

这时候就可以用到Promise.all这个方法了hTs28资讯网——每日最新资讯28at.com

Promise.all

基本特性

简单说说这个方法的使用或特性吧:hTs28资讯网——每日最新资讯28at.com

  • 接收一个 Promise 数组,执行结果返回一个新的 Promise
  • 所有 Promise 都成功的时候,返回的 Promise 才是成功
  • 要是有一个 Promise 失败,则返回的 Promise 是失败

基本使用

// 模拟异步操作const request = (delay, flag = true) => {  return new Promise((resolve, reject) => {    setTimeout(() => {      if (flag) {        resolve(`成功了${delay}`)      } else {        reject(`失败了${delay}`)      }    }, delay)  })}const fun = async (promises) => {  Promise.all(promises)    .then(res => {      console.log('res', res)    })    .catch(error => {      console.log('error', error)    })}fun([request(1000), request(500)])// res [ '成功了1000', '成功了500' ]fun([request(1000), request(500, false)])// error 失败了500

问题

Promise.all还是很好用的,但是问题来了,其中有一个错误的话,就只会输出这个失败的值,而忽略了其他成功的值,那咋办呢?我们需要自己去收集才行:hTs28资讯网——每日最新资讯28at.com

const fun = async (promises) => {  Promise.all(    promises.map(promise => {      return promise.catch(err => err)    })  )    .then(res => {      console.log('res', res)    })}fun([request(1000), request(500, false)])// res [ '成功了1000', '失败了500' ]

Promise.allSettled

其实在ES2020中,JavaScript提供了一个新语法Promise.allSettled,他能直接完成我们上面所做的处理:hTs28资讯网——每日最新资讯28at.com

  • 接收一个 Promise 数组,执行结果返回一个成功的 Promise
  • 返回 Promise 状态为成功
  • 返回 Promise 的值是一个数组
const fun = async (promises) => {  Promise.allSettled(promises)    .then(res => {      console.log('res', res)    })}fun([request(1000), request(500, false)])// res [//   { status: 'fulfilled', value: '成功了1000' },//   { status: 'rejected', reason: '失败了500' }// ]

hTs28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-80519-0.htmlPromise.all 的异常处理,我希望大家一定要了解一下!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: []byte与string的两种转换方式和底层实现

下一篇: SpringBoot + Lua = 王炸!

标签:
  • 热门焦点
  • 俄罗斯:将审查iPhone等外国公司设备 保数据安全

    iPhone和特斯拉都属于在各自领域领头羊的品牌,推出的产品也也都是数一数二的,但对于一些国家而言,它们的产品可靠性和安全性还是在限制范围内。近日,俄罗斯联邦通信、信息技术
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 8月总票房已突破10亿!《封神》第一:口碑已经成了

    8月5日消息,据灯塔专业版数据,截至8月5日9时35分,8月总票房(含预售)已突破10亿。其中,《封神》以大比分的优势领先。根据官方消息,目前该片总票房已经超过14.
  • 28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈

    前言在使用SpringBoot开发中或者在求职面试中都会使用到很多注解或者问到注解相关的知识。本文主要对一些常用的注解进行了总结,同时也会举出具体例子,供大家学习和参考。注解
  • 如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了“本地生活”入口,位置较深,位于首页的“充值中心”内,目前主要售卖美食相关的
  • 微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事“起猛了,我能看得懂日语了”。“为什么日本人说话我能听懂?”“中文不像中文,日语不像日语,但是我竟然看懂了”…&hell
  • 小米汽车电池信息疑似曝光:容量101kWh,支持800V高压快充

    7月14日消息,今日一名博主在社交媒体发布了一张疑似小米汽车电池信息的照片,显示该电池包正是宁德时代麒麟电池,容量为101kWh,电压为726.7V,可以预测小
Top