1 2 3 4

循环里调用接口

在做项目时我遇到了这样一个情景,要获取多个公司的公司信息,而获取公司信息需要传公司名称去调接口。

此时多个公司是以数组形式展示:let companies  = ['公司A ','公司B ','公司C ','公司D ']。

开始我在promise.all里面做循环遍历,代码如下:

const res = await Promise.all(
      companies.map((name) => {
          return services.getCompanyDetail({ name }//这里是调用获取公司IdCode的接口
      })
)

此时发现,虽然使用了Promise.all,但只调用了一次接口,也就是只获取了‘公司A’的公司信息,虽然返回的接口res是个数组,且长度为4,但这4个都是公司A的公司信息。

原因是await只会等待Promise.all执行完,再执行下面的,但里面的map循环不会等待接口调用完。

此时我改用递归调用:

let result = await getCompanyCode(companies,companies.length,[])


const getCompanyCode =async (companies,index,arr) => {
  let res = await services.getCompanyDetail({ name:partners[index-1] })//调接口
  arr.push(res.data)
  if(index!==1){ 
    await getCompanyCode(partners,index-1,arr)       
  }
  return arr
}

此时result返回的就是4个公司信息的数组啦

 

posted @ 2020-10-28 15:13  红鲤鱼与LV  阅读(4294)  评论(0编辑  收藏  举报