发送多个请求,所有资源请求完成后(无论成功还是失败),并统计成功和失败的个数

Promise.all 方法:

如果请求全部成功则走成功的回调,若是任意一个有一个失败则返回这个失败的结果(阻塞代码),Promise.all 成功返回成功数组,失败返回失败数据,一但失败就不会继续往下走。只适合所有异步操作都成功的情况,如果有一个操作失败,就无法满足要求。

Promise.allSettled 方法:

Promise.allSettled不论成功或失败都会执行完成,然后进行下一步操作,不会阻塞代码,然后返回一个数组,数组里面存放执行的结果和数据。

Promise.race 方法:

race含有竞速的意思,将多个Promise放在一个数组中,数组中有一个promise最先得到结果,不管是" 完成(resolved)"还是" 失败(resolved)" , 那么这个 .race 方法就会返回这个结果。

import React, { useEffect} from 'react'
import axios from 'axios'
export default function Home() {
  //定义一个请求的URL数组
  const url = [
    axios.get('http://localhost:5000/users'), //正确的
    axios.get('http://localhost:5000/roles111'),//错误的
    axios.get('http://localhost:5000/rights'),//正确的
    axios.get('http://localhost:5000/rights222')//错误的
  ]
  const getAxios=(url)=>{
    //先进行全部all方法请求 全部成功走成功回调
    Promise.all(url).then(res=>{
      console.log('全部请求成功',res);
    }).catch(err=>{
      //若是没有全部成功,走.allSettled方法 无论成功或失败都会执行完 不会代码阻塞 然后返回结果状态
      Promise.allSettled(url).then(res => {
        //定义一个失败的计数
        let count=0
        console.log('请求结果', res);
        res.map(item=>{
          if(item.status==='rejected') count++
        })
        console.log(`一共发送${res.length}个请求`);
        console.log(`请求成功${res.length-count}个`);
        console.log(`请求失败${count}个`);
      }).catch(err => {
        console.log(err);
      })
    })
  }
  //处理异步的Hooks
  useEffect(() => {
    getAxios(url)
  }, [])
  
  return (
    <div></div>
  )
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值