我目前有一个与下面类似的异步函数。它返回一个包含几个api调用结果的对象(使用axios-因此每个调用都返回一个promise)。
我的问题是可以同时调用3个api调用,但是目前我正在等待每个api调用。
我如何能够同时将它们全部解雇,但仍要确保该函数仅在全部完成后才返回。我需要承诺吗?
export async function GetItems(){
let items ={
items1:[],
items2:[],
items3:[]
}
await service.getItems1().then(r=>{
items.items1 = r.data
}
await service.getItems2().then(r=>{
items.items2 = r.data
}
await service.getItems3().then(r=>{
items.items3 = r.data
}
return items;
}
最佳答案
您需要为每个操作获得一个单独的Promise,而不使用await
(从而允许它们同时运行),然后使用Promise.all
等待所有这些操作完成:
export async function GetItems(){
let items ={
items1:[],
items2:[],
items3:[]
}
let p1 = service.getItems1().then(r=>{
items.items1 = r.data
}
let p2 = service.getItems2().then(r=>{
items.items2 = r.data
}
let p3 = service.getItems3().then(r=>{
items.items3 = r.data
}
await Promise.all([p1, p2, p3]);
return items;
}