Я пытаюсь использовать цикл while внутри асинхронной функции, и я подозреваю, что мой resol ();портит цикл, но я не уверен, что с этим делать.Вот код, который у меня есть:
app.get("/meal-plan", async function(req, res) {
var calorieCount = req.query.calorieCount;
var mealInput = parseInt(req.query.mealInput);
var dietInput = req.query.food;
var goalPerMeal = (calorieCount / mealInput);
var whichDiet = "diet." + dietInput;
var breakfastGoal = goalPerMeal;
var breakfastArr = [];
async function getBreakfastArr(){
return new Promise((resolve, reject) => {
var breakfastQuery = {"breakfast": true, [whichDiet]: true};
while (breakfastGoal >= 150) {
Food.count(breakfastQuery, function(err, count) {
if (err) {
console.log(err);
} else {
var random = Math.floor(Math.random() * count);
Food.findOne(breakfastQuery).skip(random).exec(
function(err, result) {
if (err) {
console.log(err);
} else {
breakfastGoal -= result.nutrition.calories;
breakfastArr.push(result);
resolve();
}
});
}
})
}
});
}
try {
await getBreakfastArr();
console.log(breakfastArr);
res.render("meal-plan.ejs", { meal: mealInput, calories: calorieCount, diet: dietInput, breakfast: breakfast, lunch: lunch, dinner: dinner, totalCalories: totalCalories});
} catch (e){
res.json(e);
}
});
Переменная goalPerMeal принимает данные о потреблении калорий пользователя и делит их на количество блюд, которые они выбирают в моей форме.Затем я устанавливаю это значение для определенной переменной для завтрака под названием завтрак.Функция Async находит случайный рецепт из моей базы данных и добавляет его в мой массив, завтракArr.Как только он находит рецепт, он вычитает количество калорий этого рецепта из завтрака.
Я хочу, чтобы эта функция работала до тех пор, пока завтрак не будет понижен до 150;однако, это не похоже на работу.Если я удалю цикл «В то время как», функция успешно найдет элемент завтрака, добавит его в массив и вычтет его количество калорий из функции завтрак-завтрак.Единственное, что его нарушает - это добавление цикла While
Это как-то связано с resol ();в асинхронной функции, или я упускаю что-то важное?
Любая помощь очень ценится.