【问题标题】:why does my function returns undefined? [duplicate]为什么我的函数返回未定义? [复制]
【发布时间】:2018-06-28 11:54:27
【问题描述】:

我正在尝试创建一个过滤器来阻止提交表单中的重复,我使用了 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;
    }
  });
}

【问题讨论】:

  • 格式化代码以获得更好的可读性

标签: javascript node.js express


【解决方案1】:

尝试使用

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 返回一个承诺,因此您必须订阅它才能获取数据。

【讨论】:

  • 至于if(participant),基本上,如果findOne返回一个参与者,它找到了,它会返回false,反之,如果没有找到参与者,你会得到false
  • return !!participant ?
  • @thebjorn 什么?
  • 对不起,我的眼睛有点交叉。它当然应该是return !participant;——这是写你的 if/return 语句的更短的方法。 (return !!participant; 用于真正的分支应该返回true。)
  • 哦,新东西,谢谢 :D
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果没有返回值,则函数返回undefined

    发帖前请查看MDN

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        function timeOut()
        { 
          setTimeout(function(){ return true; })
        };
        
        timeOut(); // returns undefined
        

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

        所以要解决你的问题,如果你的 ORM 支持 Promise,你需要更新代码如下。

        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;
          ))
        }
        

        希望这能解决您的问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-07
          • 1970-01-01
          • 2014-06-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-19
          • 2022-08-15
          相关资源
          最近更新 更多