为什么我的函数返回未定义?

时间:2018-06-28 11:54:28

标签: javascript node.js express

我正在尝试创建一个过滤器以停止提交表单中的重复,我使用了findone并检查它是否为null,否则返回true,反之亦然,但是它始终返回undefined

function checkParticipant(fname, mname, lname, foname){
  Participant.findOne({
    fname: fname,
    mname: mname,
    lname: lname,
    foname: foname
  }, function(err,participant){
    if(participant == null){
      return true;
    }else{
      return false;
    }
  });
}

5 个答案:

答案 0 :(得分:0)

尝试使用

function checkParticipant(fname, mname, lname, foname){
  Partiipant.findOne({fname:fname, mname:mname, lname:lname, foname:foname }).then( participant => (
   if(participant) return false
   else return true;
))
}

FindOne返回一个承诺,因此您必须订阅它才能获取数据。

答案 1 :(得分:0)

您的checkParticipant函数不包含return语句。 因此它将返回未定义。

答案 2 :(得分:0)

如果未返回值,则函数返回undefined

在发布之前,请检查MDN

答案 3 :(得分:0)

问题是您试图从异步函数返回。这是不可能的。查看this答案以解决问题

答案 4 :(得分:0)

您返回的代码没有问题。它只是关于Javascript回调函数的概念。

function timeOut()
{ 
  setTimeout(function(){ return true; })
};

timeOut(); // returns undefined

执行此函数将返回未定义的内容,因为查询具有在不同上下文中运行的回调函数,并且不返回任何表示未定义的内容。

因此,要解决您的问题,如果您的ORM支持承诺,则需要按以下方式更新代码。

function checkParticipant(fname, mname, lname, foname){
   return Partiipant.findOne({fname:fname, mname:mname, lname:lname, foname:foname 
}).then( participant => (
   if(participant == null)
   {
       return true;
   }
   else return false;
  ))
}

希望这可以解决您的问题。