promise-遍历发起请求,前面的请求完成之后再去发起后续的请求

4 篇文章 0 订阅
1 篇文章 0 订阅
本文介绍了一个需求场景,需要遍历N组IP,每组IP调用两个接口,前一个接口成功后调用下一个。作者采用递归结合Promise的方法实现,通过在递归函数中处理回调,确保接口请求的顺序。代码示例展示了如何在`handleSubmit`、`recursion`和`pollRequest`方法中实现这一逻辑。
摘要由CSDN通过智能技术生成

需求场景:

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)
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值