遍历数组使用await导致乱序

遍历数组使用await导致乱序

错误代码:

getList(){
	let res = await this.api.CataLogApi.processHistory(this.workflowid)
	      this.auditList = []
	        res.forEach(async item => {
	        // 简化后的逻辑
	            let resName = await this.api.CommonApi.findUserInfoByUser(item.userid)
	            this.auditList.push({name:resName.NAME})
	        })
 }

缺陷:因为接口返回不是顺序的,所以导致明明res是按照时间排序好了返回给我的,遍历的时候又请求了接口导致最终的auditList是乱序。

解决代码

getList(){
	let res = await this.api.CataLogApi.processHistory(this.workflowid)
	      this.auditList = []
	        res.forEach(item => {
	        // 简化后的逻辑
	            this.auditList.push({name:''})
	        })
	        this.formatName()
	}
formatName(){
	this.auditList.forEach(async item => {
	        // 简化后的逻辑
	        let resName = await this.api.CommonApi.findUserInfoByUser(item.userid)
	        item.name = resName.NAME
	})
}

解决思路:在getList里面,将数据顺便赋值给auditList,之后再调用接口请求刷新name这个字段。就不会将auditList搞乱了。所以不要动态的给数组item,而是要一口气顺序给掉,之后再写逻辑。

更新

刚刚重读了一下ES6文档,forEach中的await都是并发执行的,但是由于我们后端返回的数据是排好序的,需要await继发执行,所以可以使用for…of循环。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值