需求场景:
N组IP,遍历去调接口,一组IP调两个不同的接口,前一个接口成功之后,再去调后一个接口,否则,遍历结束。
实现:
首先想到的是for循环,但因为是一组请求两个异步的IP不太好处理,所以最后采用了递归+promise的方式。
在发起请求的方法里面定义一个count变量
let count = 0
然后写一个递归方法
比如recursion(),形参传一个IP组,定义这个方法的时候需要用到发起请求的方法pollRequest(),pollRequest里面使用promise处理同步的请求,然后在递归的方法里面处理回调。代码实现如下:
handleSubmit(){
this.loading = true
let count = 0
this.recursion(ipArr,count)
}
// 递归方法
recursion(ipArr,count){
this.pollRequest(ipArr[count]).then(res => {
// resolve的回调
// 完成一组Ip的请求,count+1
count++
// 判断是否递归的条件
if(count < ipArr.length){
// 递归
this.recursion(ipArr,count)
}else{
this.loading = false
}
}).catch( res => {
// reject的回调
this.loading = false
this.$message.error(res.message)
})
}
// 同步请求
pollRequest(hostIp) {
return new promise(resolve,reject) => {
// 模拟的接口返回
let res = {
code1:'200',
code2:'200'
message:'接口返回成功'
}
// 模拟接口调用 这个是一组IP中的第一个请求
setTimeout( res => {
if(res1.code === '200') {
// 第二个请求
setTimeout( res => {
if(res2.code === '200') {
resolve(res)
}else {
reject(res)
}
},2000)
}else {
reject(res)
}
},1000)
}
}