簡體   English   中英

將call()與node.js一起使用時獲取返回值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM