2016-07-18 106 views
-1

我重视我的服务器代码:顺序不正确执行(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"); 
       } 
      } 
     }); 

所以......执行没有按正确的顺序执行,结果是不正确的。 有人知道我该如何解决它? 在此先感谢。

此致敬礼。

回答

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在你的代码,当你运行多个客户针对其将获得你的惨败服务器。不要在节点中使用像这样的全局变量。

+0

非常非常感谢你!这是正确的!! :) – Tecnico