H5W3
当前位置:H5W3 > 其他技术问题 > 正文

js循环中调接口,返回值的顺序问题

如果在js的循环中调接口,因为接口请求的数据响应时间不一样,所以接口返回值有快有慢,但是用什么方法可以保证返回的数据接顺序返回呢???
下面是代码
response.data.valueList.map是数组值,循环调接口拿值。


response.data.valueList.map(m=>{
let query={page:1,limit:500,attributeId:m.attributeId}
goodsModule.attrList(query).then(response=>{
if(response.code===0){
console.log(response.data)
response.data.list.map(n=>{
if(n.attributeValueId===m.attributeValueId){
m.attributeValueName=n.value
}
})
this.specsListCopy.push({specsDefault:m.attributeId,attributeList:response.data.list,attributeValue:m.attributeValueId,attributeValueName:m.attributeValueName})
}else{
response.data.list=[]
this.specsListCopy.push({specsDefault:m.attributeId,attributeList:response.data.list,attributeValue:m.attributeValueId})
}
})
})

回答

Promise.all

要看你循环怎么写,如果是 Async function,比如

for (....) {
  await fetch();
}

那么自然就是顺序的。或者就用 Promise.all() 也可以。

如果同时异步发起请求的话,数据顺序返回是没有办法保证的,除非同步请求。

但是,你可以做到数据顺序处理

  • 可以借助 Promise.allPromise.allSettled这一类的工具
  • 自己给每个请求编个序号,响应之后,使用类似CountDownLatch的方式,等待所有请求都返回数据之后,再调用处理方法。

未经允许不得转载:H5W3 » js循环中调接口,返回值的顺序问题

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址