我的服务器TCP(node.js)上的订单执行不正确

时间:2016-07-18 15:21:55

标签: node.js

我附上了我的服务器代码:

var net = require('net');
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('MyBBDD.db');
var prueba = '';

function get_kw_actual(nombre,callback){ 
    stmt = db.prepare("SELECT kw_actual FROM usuarios WHERE usuario = ?");
        stmt.bind(nombre);
        stmt.get(function(error,row){
            if(error){
                throw err;
            }
            else{
                if(row){
                    entero=row.kw_actual;
                    callback(entero);
                }
                else{
                    console.log("error");
                }
            }
        }); 
}

var server = net.createServer(function(socket) {
    console.log("Recibo peticion");

    socket.on('data', function (data) {
        get_kw_actual('Pepe',function(resultado){
            console.log('resultado es: ' + resultado);
            prueba = '' + resultado;
        })
        socket.write(prueba);
    });

    socket.on('close', function () {
            console.log('Connection closed');
    });

});
server.listen(1337, '192.168.1.101');

在我的服务器中,我收到一个请求,我打电话给我的功能" get_kw_actual"我得到了一些我的数据库,最后我回复了结果。 问题是它首先运行" socket.write(prueba);"比:

stmt.get(function(error,row){
            if(error){
                throw err;
            }
            else{
                if(row){
                    entero=row.kw_actual;
                    callback(entero);
                }
                else{
                    console.log("error");
                }
            }
        }); 

所以...执行没有按正确的顺序执行,结果不正确。 有人知道如何解决它? 提前谢谢。

最好的问候。

1 个答案:

答案 0 :(得分:0)

Node.js代码以异步方式运行。回调get_kw_actual中的代码立即返回,但回调将在稍后的数据库操作完成时运行。你想要做的是将socket.write放在回调中,如下所示:

socket.on('data', function (data) {
    get_kw_actual('Pepe',function(resultado){
        console.log('resultado es: ' + resultado);
        socket.write(resultado);
    })
});

另请注意,您在代码中使用了全局变量prueba,当您有多个客户端针对您的服务器运行时,这些变量会被破坏。不要在节点中使用这样的全局变量。