async-await的循环请求数据

循环按顺序请求数组中的接口
——async-await的循环请求数据,并弹窗实现告知用户请求结果

1.forEach+async-await循环遍历数组的子项形成参数请求接口

rateIds.data.forEach(item => {
	const requestData = {
		id: item,
		product_tax: rateData.productionRate,
		operator_tax: rateData.operateRate,
		market_tax: rateData.marketRate
	}
	const { error, code } = await CpListService.SaveCpTax(requestData)
	if (error || code !== 0) {
		errMessage.push(item)
	} else {
		sucMessage.push(item)
	}
})

通过这种方式请求接口之后接口都正常请求了,但是这里的arr数组输出是空,并且是在接口内容返回之前就输出了,也就是说这里的async-await并没有生效。原因是async会返回一个promise对象,而forEach没有return值,就没有环节可以去处理这个返回对promise对象,换言之就是forEach只支持同步操作不支持异步操作。(map可以试试

2.采用for-of+async-await循环遍历数组

for (const item of rateIds.data) {
	const requestData = {
		id: item,
		product_tax: rateData.productionRate,
		operator_tax: rateData.operateRate,
		market_tax: rateData.marketRate
	}
const { error, code } = await CpListService.SaveCpTax(requestData)
	if (error || code !== 0) {
		errMessage.push(item)
	} else {
		sucMessage.push(item)
	}
}

第二种方法满足实现该需求

3.采用promise+async-await的方法操作

const promises = rateIds.data.map(async (item) => {
	const requestData = {
		id: item,
		product_tax: rateData.productionRate,
		operator_tax: rateData.operateRate,
		market_tax: rateData.marketRate
	}
	const result = await CpListService.SaveCpTax(requestData)
	return result
	}
)
await Promise.all(promises)

这种方式可以实现等待所有接口请求完成之后再输入请求的内容,但是Promise.all 方法会按照并行的模式,将所有请求一次性全部发送出去,然后等待接收到全部结果后,按照顺序打印出来而已。它并不会按照顺序发送一个请求,收到结果后再发送下一个请求。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值