JavaScript:Aync/Await 不等待函数完全处理多个 forEach 循环[重复]

问题描述 投票:0回答:1
async function fnGetVehicleList(makeCode, responseModels){
    let vehicleListData = [];
    await responseModels.Table.forEach(async (model) => {
      const vehicleDetailResponse = await getVehicleDetails('2024',makeCode, model.Code); // API call. This is also an Async function
      await vehicleDetailResponse.Table.forEach(async (vehicleItem)=>{
        await vehicleListData.push(vehicleItem);
      });
    });
  return await vehicleListData;
}

这里,vehicleListData 不会等待两个 forEach 循环都被执行。

它会一直等待,直到对responseModels forEach 循环中的所有项目进行API 调用。但是,一旦进行 API 调用,它就不会等待第二个 forEach 循环,即 (vehicleDetailResponse.Table.forEach),而只是返回vehicleListData,它是函数中的空数据。

请让我知道如何等待第二个 forEach 循环也被执行,然后函数返回响应

javascript async-await
1个回答
0
投票

forEach
不返回 Promise,
push
也不返回。您应该重写代码以使用
Promise.all
解析值数组,并使用
flat(1)
解包嵌套响应。这展示了如何使用 Promise 作为值,而不是简单地将它们用作控制副作用的时机 -

async function fnGetVehicleList(makeCode, responseModels) {
  const all = await Promise.all(responseModels.Table.map(model =>
    getVehicleDetails('2024', makeCode, model.Code)
  ))
  return all.flat(1)
}
© www.soinside.com 2019 - 2024. All rights reserved.