Javascript函数返回总是未定义

时间:2015-07-11 00:08:52

标签: javascript function mongoose

JS的新手,所以我希望我的bug很容易修复。

所以我在users.js文件中找到了一个函数:

exports.authenticate = function(user){
User.findOne({
    'username':user.username,
    'password':user.password,
},'username', function (err, dbuser) {
        if (err) return handleError(err);
        console.log(Boolean(dbuser));
        return Boolean(dbuser);

    });
}

所以我将我的dbuser的值作为布尔值返回:如果存在则返回true,否则返回false。很简单没有?但是有陷阱......

var userClass = require('./users.js');
var myUser = userClass.create('xxazeddax','azezaeazeazeaz','mazeazeazezaeaze');
var authent  = userClass.authenticate(myUser);
console.log(authent);

这里我期待一个布尔值,因为它是authenticate()唯一可以返回的东西..但是,我没有定义。 拜托,我哪里错了?

1 个答案:

答案 0 :(得分:3)

您的function(user)又名authenticate不会返回任何其他函数function (err, dbuser)是回调函数,这意味着它将在请求完成时执行,但是,因为它是回调功能这意味着function(err, dbuser)并不意味着按顺序执行。

我建议您阅读本文以了解正在发生的事情

http://www.impressivewebs.com/callback-functions-javascript/

我通过这种方式快速查看改变代码的方法:

function(user){
     User.findOne({'username':user.username,'password':user.password},'username', 
     function (err, dbuser) {
        if (err) return handleError(err);
        console.log(Boolean(dbuser));
        return Boolean(dbuser);
    });
  return true; //<-- authenticate will always return true
}