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

回到顶部