我正在尝试创建一个过滤器以停止提交表单中的重复,我使用了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;
}
});
}
答案 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;
))
}
希望这可以解决您的问题。