[英]Get return value when using call() with node.js
我目前正在使用json-socket模塊在node.js中編程套接字服務器,並且遇到了一些麻煩。
當前,當客戶端連接到服務器時,他們在json對象中發送命令,並提供一些數據,例如,登錄看起來像這樣
{ type : 'login', data : { username: 'Spero78' } }
處理這些請求,我有一個命令對象
var commands = {
'login' : authUser,
'register' : userRegister
}
這些功能由server.on調用
server.on('connection', function(socket) {
console.log('Client Connected');
socket = new JsonSocket(socket);
socket.on('message', function(message) {
if(message.type != undefined) {
if(commands[message.type]){
var response = commands[message.type].call(this, message.data);
if(response != undefined){
console.log(response);
socket.sendMessage(response);
} else {
console.log("No Response!");
}
} else {
console.log('Unexpected Command!');
}
}
});
});
該函數返回javascript對象,但響應變量始終未定義,並且“無響應!” 消息總是打印
這是authUser函數
function authUser(data){
console.log('Auth: ' + data.username);
database.query('SELECT * FROM players WHERE username = ?', [data.username], function(err, results) {
if(results.length < 1){
console.log('Bad Login!');
var response = {
type : 'badlogin',
data : {
//...
}
}
return response;
}
var player = results[0];
var response = {
type : 'player',
data : {
//...
}
}
return response;
});
}
有更好的方法嗎? 還是我錯過了導致對象無法返回的東西
database.query()
是異步的,因此當您調用此函數時,nodejs不必等待回調的響應即可轉到下一條指令。
因此,根據您的條件測試的值不是回調中的返回值,而是整個authUser
函數的返回值,這就是為什么它始終未定義的原因。
您可能需要重構代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.