循環里調用接口


在做項目時我遇到了這樣一個情景,要獲取多個公司的公司信息,而獲取公司信息需要傳公司名稱去調接口。

此時多個公司是以數組形式展示: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個公司信息的數組啦

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM