在做項目時我遇到了這樣一個情景,要獲取多個公司的公司信息,而獲取公司信息需要傳公司名稱去調接口。
此時多個公司是以數組形式展示: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個公司信息的數組啦