需求:有一个数组arr不确定长度,1.根据数组中的每个唯一(id)请求接口获取到对应数据更新数组的arr的值,2.也可以调用一个指定的arr的下标中的id更新对应的这一条数据
先上核心代码
let newArr=[] const listRes = arr.map( async(itm,idx)=>{let {id,num,......}=itemlet obj={id,num,...} newArr.push(obj)await oneRequest(obj,newArr.length-1)//调用接口更新num })await Promise.all(listRes)
注意 最后的await外边应该包一个aysnc
解析:在map循环的时候,使用aysnc/await来处理异步接口请求,
oneRequest来更新对应数据,最后使用promise.all来等待所有请求完成从而更新数据
async oneRequest(itm,idx){const params ={id:itm.id,num:itm.num,...}//请求接口const res = await realRes(params);if(res?.num){this.$set(newArr[idx],'num',res.num) }else{//健全下接口没返回this.$set(newArr[idx],'num',0) } }
这个请求接口统一封装如果只改其中一条数据那就可以通用,当然也可以更全加上try/catch更好
以上就是使用了async/await和promise.all来更新对应数据