等待for循环结束以继续JavaScript中的功能

时间:2020-03-09 14:02:25

标签: javascript reactjs for-loop ecmascript-6

我有一个问题!我希望函数 getMealSummary ()在 for循环完成后返回(我不包括返回键,因为该函数很大,我只是有疑问在本节中。)

我该如何使用异步/等待或诺言?

谢谢

    export const getMealMicroSummaryHelper = async function getMealSummary(array, populatedFoods, customMeasurements, isRecipe,expertId){
  var [totalZinc, totalCalcium,totalAlphaCarotene,totalBetaCarotene,totalCholine,totalCopper,totalBetaCrypto,totalFluoride,totalVitaminB9,totalIron,
    totalLutein,totalLycopene,totalMagnesium,totalManganese,totalNiacin,totalVitaminB5,totalPhosphorus,totalPotassium,totalRetinol,totalRiboflavin,
    totalSelenium,totalSodium,totalTheobromine,totalVitaminA,totalVitaminB12,totalVitaminB6,totalVitaminC,totalVitaminD,totalVitaminD2,totalVitaminD3,
    totalVitaminE,totalThiamin] = [0, 0, 0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];

  let recipesArray = []

  for(let i = 0; i < populatedFoods.length; i++){
       if(populatedFoods[i].foodType === 4){
            await apiCall("get",`/api/experts/${expertId}/recipes/${populatedFoods[i]._id}`)
          .then(recipe =>{
            recipesArray.push(recipe)
          })
          .catch((err)=>console.log(err))
        } 

1 个答案:

答案 0 :(得分:1)

您可以使用map()Promise.all的组合,例如:

async function getMealSummary(array, populatedFoods, customMeasurements, isRecipe, expertId) {
   try {

      let recipesArray = await Promise.all(
         populatedFoods.map(async populatedFoods => {
            if (populatedFoods[i].foodType === 4) {
               let recipe = await apiCall("get", `/api/experts/${expertId}/recipes/${populatedFoods[i]._id}`)
               return recipe;
            }
         })
      )

   } catch (err) {
      console.log(err)
   }
}

这只是一个简单的版本,可为您提供基本的想法。我没有包括您在recipesArray以上声明的所有变量。这些将需要根据需要包括在内。