for 循环中异步再异步闭包问题

需求详情

一个数组,根据数组arr中的id,调接口拿到每一个的name,然后在回调函数中,用对应的id和name去获取更多详情,例如age,height。

第一版实现

for(var i = 0; i < arr.length; i++) {
	let temp = arr[i];
	// 接口请求,假设为this.get
	this.get1(url1,temp).success(function(res) {
		if(res.success) {
			let name = res.name
			this.get2(url2,temp,name).success(res){
				// res
			}
		}
	})
}

问题所在:
出现闭包问题了,后来我根据网上的闭包解决方式
好吧,我没有试成功,是我太笨辽。

第二版实现

我想到了一个办法,我在第一个接口调用的时候,将每一个返回的name 存入一个数组,然后再次循环数组去调第二个接口。
但是,普通的异步函数调用,name数组何时能够完成是个问题。
于是,我想到了Promise
实现方法如下:

let arr2 = []
for(var i = 0; i < arr.length; i++) {
	let temp = arr[i];
	arr2.push(new Promise(function(resolve,reject) {
		this.get1(url1,temp).success(function(res) {
			if(res.success) {
				res.id = temp
				resolve({id:temp,
				name: res.name})
			}
		})
	}))
}

Promise.all(arr2).then(res => {
  for(let j = 0;j<res.length;j++) {
  	let temp = res[j]
  	this.get2(url2,temp.id,temp.name).success(function(res) {
  		if(res.success){
  			console.log(res)
  		}
  	})
  }  
})

照着上面的依葫芦画瓢就可以了,闭包的,哪位大神可以解决,麻烦指导一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值