2016-01-06 80 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來替換回調函數,以便更輕鬆地跟蹤和調試代碼。 –

相關問題