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>
)
}