我目前有一个与下面类似的异步函数。它返回一个包含几个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;
}

07-24 09:18