如何等待序列化结果再采取进一步行动?

时间:2019-07-05 08:16:00

标签: node.js express async-await sequelize.js

我正在开发nodejs API。在我的某些API中,我需要检查数据库中某些参数是否唯一,并且需要使用单独的方法对其进行编码以共享功能。 (PS:我不想在续集模型中这样做)

我的api调用

    var duplicate = checkUniqueEmail(req.body.email);
    console.log(duplicate);
    if(duplicate == true){ 
       //do something 
    } else { 
       //return error 
    };

这样的检查方法

  function checkUniqueEmail(email){
    db.users.find( {
        where: {email: email} 
    }).then( (result) => {
        if(result !== null){
           return false;
        } else {
           return true;
        }
    }).catch(err => {
         console.log(err);
    });

  }

但是最后我通过console.log(重复)得到了undefined

问题似乎是我在执行之前记录了结果并返回了一些结果,这应该是javascript异步问题。

如何修改代码以实现目标?

1 个答案:

答案 0 :(得分:-1)

您的代码存在的问题是checkUniqueEmail函数没有返回任何值。您要么使用asyncawait重写它,要么在调用DB之前添加return关键字:

async foo() {
   var duplicate = await checkUniqueEmail(req.body.email);
   console.log(duplicate);
   if (duplicate == true){ 
      //do something 
   } else { 
      //return error 
   }
}

async checkUniqueEmail(email){
   try {
      var result = await db.users.find({where: {email: email}});
      if (result !== null){
         return false;
      } else {
         return true;
      }
   } catch (err) {
      console.log(err);
   }
}