Promise.all的用法
最近做的一个后台管理系统的有一个表格数据的渲染,用的是ProTable组件,表格数据的第一列展示的是图片,但是获取图片地址的是接口2,而获取表格数据是接口1。调用接口2需要携带的参数获取表格数据的主键id。
现在遇到的问题就是:
调用接口1,拿到每一行的主键id,然后再分别用每一行的主键id,去调用接口2,去获取到每一行的图片地址,进而把图片展示到每一行的列表。
使用Promise.all
//接口1中获取表格数据
const requestData = async (params, sorter, filter) => {
params.pageNumber = current
params.pageSize = pageSize
delete params.current
data = await api.selectByPage({ columnId:selectedKey,...params })
if (data.code == "1") {
//循环遍历接口1的数据拿到每一行的id,统一去请求接口2
let picPromise = data.data.map((item) => {
if(item.bannerFileId){
// 在循环中调用接口2,参数传id
return api.downloadFileAddressRecord({fileId:item.bannerFileId})
}
})
//Promise.all前记得加await
await Promise.all(picPromise).then((result) => {
// result是 一起请求接口2返回的数据的集合,一个item就是一个接口2返回的数据,需要遍历
result.forEach((item,index) => {
// 遍历拿到每一个接口2中的url拼接到接口1里边的每一项中
data.data[index].url = item?.data
})
})
return {
data: data.data,
success: true,
total: data.data.total,
}
} else {
return {
data: [],
success: true,
}
}
}
}