2016-01-06 81 views
0

写入节点js脚本并产生下一个问题。我如何从一个ClientSession功能从nodejs中获取第二个函数的结果

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

从我看到的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); 
    } 
}); 
+0

很好的解决方案:)谢谢 –

+0

@DmitriyKupriyanov如果这个回答乌尔问题会确立这个作为答案。 – blessenm

+0

建议使用promise来替换回调函数,以便更轻松地跟踪和调试代码。 –

相关问题