Javascript 异步等待不使用两个函数

Javascript 异步等待不使用两个函数,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 => {

我有一个函数,可以访问数据库来确定每种成分的总排放量。然后将该值保存到对象和数据库中。但是,在计算排放总量之前将保存对象

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()之后执行。

emissionTotal
需要放在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;
}

emission\u 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;
}

getEmissionTotal()
不返回任何要等待的内容将
emissiontotal
声明放入
getEmissionTotal()
中,然后
返回emissiontotal
。在
next()
函数中,声明另一个变量
const emissionTotal=wait getEmissionTotal()
getEmissionTotal()
不返回任何要等待的内容将
emissionTotal
声明放入
getEmissionTotal()
中,然后
返回emissionTotal
。在
next()
函数中,声明另一个变量
const emissionTotal=wait getEmissionTotal()