vue如何循环请求同一个接口十次,等第一个请求完成再请求第二个以此类推...请求到第十次如果十次都没结果等三秒重新发起请求?
如题,求解答
回答:
十次中有一次成功都终止后面的请求,还是十次需要请求完,下面是请求完
function request(){ return new Promise((res, rej) => {
setTimeout(() => {
Math.random() > 0.5 ? res() : rej()
}, Math.random() * 1000 + 1000)
})
}
function loop(){
let flag = false
let p = Promise.resolve()
for(let i = 0; i < 10; i++){
p = p.then(_ => {
return request().then(_ => {
flag = true
}, err => {})
})
}
p.then(_ => {
flag || setTimeout(loop, 3000)
})
}
回答:
可以在requestDemo手动改变promise状态进行实验
function requestHandler(step = 1,results = []){ let result = results;
requestDemo().then(res=>{
result.push(true)
}).catch(err=>{
result.push(false)
}).finally(res=>{
if(step<10){
requestHandler(step + 1,result)
}else{
if(result.every(item=>!item)){
setTimeout(()=>{
requestHandler(1)
},3000)
}
}
})
}
function requestDemo(){
return new Promise((resolve,reject)=>{
// resolve();
reject();
})
}
requestHandler()
回答:
成功即返回 失败则继续。尝试10次,失败后等待3s
async function request(params, retry = 10) { try {
const res = await axios('url')
return res;
} catch (ex) {
if (retry === 1)
return new Promise((resolve, reject)=> {
setTimeout(() => {
resolve(fn(params))
}, 3000)
});
return fn(params, --retry);
}
}
以上是 vue如何循环请求同一个接口十次,等第一个请求完成再请求第二个以此类推...请求到第十次如果十次都没结果等三秒重新发起请求? 的全部内容, 来源链接: utcz.com/p/933119.html