#javascript #node.js
#javascript #node.js
Вопрос:
У меня есть функция, которая обращается к базе данных для определения общего объема выбросов для каждого ингредиента. Затем это значение сохраняется в объекте и в базе данных. Однако объект сохраняется до того, как можно будет вычислить итоговые значения выбросов.
var emission_total = 0;
async function getEmissionTotal() {
for (var x in ingredients) {
Emission.findOne({food_name:ingredients[x]}).then(result => {
console.log(result);
if (result == null) {
emission_total = 0;
console.log(emission_total);
}
else {
emission_total = 0.7;
console.log(emission_total);
}
})
.catch(err => console.log(err));
}
return;
}
async function next() {
await getEmissionTotal();
const date = req.body.date;
const description = req.body.description;
const food_list = ingredients;
const photo = photo_link;
const nutrients = {
'calories': req.body.calories,
'fat': req.body.fat,
'sugar': req.body.sugar,
'carbs': req.body.carbs,
'cholesterol': req.body.cholesterol,
'protein': req.body.protein,
'emissions': emission_total
}
console.log(nutrients);
const newNutrition = new Nutrition({
date,
description,
photo,
nutrients,
food_list
});
console.log(newNutrition)
newNutrition.save()
.then(() => res.json('Nutrition added!'))
.catch(err => res.status(400).json('Error: ' err));
}
next();
По сути, функция next() должна выполняться после асинхронной функции getEmissionTotal()
Комментарии:
1.
getEmissionTotal()
не возвращает ничего, чего нужно ждать2. внесите
emission_total
объявление вgetEmissionTotal()
и затемreturn emission_total
. Вnext()
функции объявите другую переменнуюconst emissionTotal = await getEmissionTotal()
Ответ №1:
emission_total
необходимо ввести метод getEmissionTotal. Также вы ничего не возвращаете и не ждете результата.
async function getEmissionTotal() {
let emission_total = 0;
for (var x in ingredients) {
try {
const result = await Emission.findOne({food_name:ingredients[x]});
console.log(result);
if (result == null) {
emission_total = 0;
console.log(emission_total);
} else {
emission_total = 0.7;
console.log(emission_total);
}
} catch(err) {
console.log(err);
}
}
return emission_total;
}