我附上了我的服务器代码:
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");
}
}
});
所以...执行没有按正确的顺序执行,结果不正确。 有人知道如何解决它? 提前谢谢。
最好的问候。
答案 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
,当您有多个客户端针对您的服务器运行时,这些变量会被破坏。不要在节点中使用这样的全局变量。