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 循环也被执行,然后函数返回响应
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)
}