Ожидание окончания функции l oop для продолжения функции в javascript - PullRequest
0 голосов
/ 09 марта 2020

У меня есть один вопрос! Я хочу, чтобы функция getMealSummary () возвращалась после того, как для l oop уже закончено (я не включил клавишу возврата, потому что функция очень большая, и у меня только что был сомнения в этом разделе).

Как я могу сделать это с async / await или обещаниями?

Спасибо

    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 Ответ

1 голос
/ 09 марта 2020

Вы можете использовать комбинацию 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)
   }
}

Это просто простая версия, чтобы дать вам базовая c идея. Я не включил все переменные, которые вы объявили выше recipesArray. Они должны быть включены по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...