从nodejs中获取第二个函数的结果

时间:2016-01-06 13:30:43

标签: javascript node.js redis

编写节点js脚本并有下一个问题。我如何从clientSession函数获得结果

var User = function() {}
User.prototype.get_current_user = function (cookie) {
    var cookieManager = new co.cookie(cookie);
    var clientSession = new redis.createClient();

    var respons=clientSession.get("sessions/"+cookieManager.get("PHPSESSID"), function(error, result) {
        try {
            if(result != null){
                var session=JSON.parse(result);
                if(session.current_user_ID>=1) {
                    return session.current_user_ID;
                }
            } else {
                return "session does not exist";
            }
        } catch (error) {
            return "error : "+error;
        }
    });
    return respons;
}

module.exports = new User();

函数调用

var User=require('user');
var user_data=User.get_current_user(ws.upgradeReq.headers["cookie"]);
console.log(user_data); // return null. Null it's wrong answer :)

谁有任何想法?

1 个答案:

答案 0 :(得分:1)

从我看到的get_current_user是一个异步函数。因此,如果您想要current_user_ID,则需要传入一个函数以用作回调。

User.prototype.get_current_user = function (cookie, callback) {
    var cookieManager = new co.cookie(cookie);
    var clientSession = new redis.createClient();

    clientSession.get("sessions/"+cookieManager.get("PHPSESSID"), function(error, result) {
        try {
            if(result != null){
                var session=JSON.parse(result);
                if(session.current_user_ID>=1) {
                    callback(null, session.current_user_ID);
                }
            } else {
                callback("session does not exist");
            }
        } catch (error) {
            callback("error : "+error);
        }
    });
}

然后将其用作

User.get_current_user(ws.upgradeReq.headers["cookie"], function(err, userId) {
  if(!err) {
    console.log(userId);
  }
});