在做项目时我遇到了这样一个情景,要获取多个公司的公司信息,而获取公司信息需要传公司名称去调接口。
此时多个公司是以数组形式展示: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个公司信息的数组啦