前段时间面试大厂的时候,遇到这个问题,虽然那时候也使用Promise 和递归完成了该问题,虽然功能可以实现但是总感觉有问题,于是参考了别人的文章,自己重新封装了一个
代码如下
import axios from 'axios';
//fn 传入的方法,params 传入的参数 ,frequency 重复调用的次数
//接口失败重调,方法封装
const retry = (fn=(e:object)=>{},params:object,frequency:number) =>{
return new Promise(async (resolve,reject)=>{
//每循环一次减少1
while(frequency--){
try{
const res = await fn(params)
resolve(res);
//成功终止循环
break;
}catch(error){
if(frequency<=0){
//次数小于0的时候,抛出异常,中断循环
reject(error)
}
}
}
})
}
//使用
const getApi = (params:object) =>{
return axios.get("接口路径",{params})
}
retry(getApi,{a:1,b:2},5).then(res=>{}).catch(err=>{})