未定义的值从node.js javascript类返回

时间:2016-04-12 17:58:06

标签: javascript node.js

我已经声明了生成记录的类,只是返回它但它返回未定义。

var classObj = new User();
var user = classObj.generateUserResponse(val1,mode);
console.log(user) //undefined

User.prototype.generateUserResponse = function (userid, mode) {

     conn.query('select * from users where user_id = ?', [userid], function (err, user) {
              if(mode == 'true') {
                   var genObj = new CustomerJSON();
                   userObj = genObj.generateUserCustomer(user);
                   console.log(userObj) // displays the value
                   return userObj;
              } else {
                // do something else
}
    })

我上面所做的是创建一个新类并在新类中传递用户对象以进行进一步处理。我可以控制日志并可以查看数据但是当我返回userObj时它会显示undefine。

2 个答案:

答案 0 :(得分:1)

这是正确的,因为在将对象记录到控制台后,调用的异步函数会调用回调(将对象返回给noone)。 函数generateUserResponse不返回任何值。

解决方案:在回调函数中进行必要的操作。

答案 1 :(得分:1)

帕维尔是对的。你的功能是异步的。你需要一个回调。尝试这样的事情:

cache.SetEntryInHash(Hash, key, Item);
cache.ExpireEntryAt(key, DateTime.Now.Add(TimeSpan.FromSeconds(30)));

或者您可以var classObj = new User(); classObj.generateUserResponse(val1, mode, function(userObj) { console.log(userObj); }); User.prototype.generateUserResponse = function(userid, mode, callback) { //you could decide to return conn.query here and handle it differently above conn.query('select * from users where user_id = ?', [userid], function(err, user) { if (mode == 'true') { var genObj = new CustomerJSON(); userObj = genObj.generateUserCustomer(user); console.log(userObj) // displays the value return callback(userObj); } else { // do something else //THEN return callback(userObj); } }) }); 根据您正在使用的库来处理它返回的承诺。