Node.js函数在返回数据/实现回调之前返回null

时间:2014-12-17 16:22:49

标签: javascript node.js socket.io

对Node.JS / Socket.io来说很新,对于正确实现回调有点头疼。熟悉JS / jQuery但从来没有完全掌握在jQuery的实现之外创建自己的回调。

任何人,我有一个带有构造函数,原型方法等的类,它可以很好地处理静态数据,但是当我通过TCP套接字调用服务器时(当然使用包装模块)我的函数在获取实际数据之前返回null:

server.prototype.getStatus = function(){
var results = "";
 this.conn.sendCommand('status', function(err, response){
    if(err){console.error(err);return;}
        results = response['data'];
        /*Callback here - I'm trying to return the response message to the browser.*/
    });
return results;
 };

此功能适用于静态数据(例如结果=' test'),但是,因为我必须连接到服务器才能获得实现回调函数所需的消息(I' m假设...) - 我知道我在这里开的不正确。

对于我的服务器'代码使用如下:

 socket.on('get status', function(){
   io.emit('status', server.getStatus());
 });

此方法目前也通过提交按钮触发。当然,我的静态.html页面抓住了这个罚款:

  socket.on('status', function(msg){
    alert(msg);
    $('#status').append(msg);
  });

因为我的功能不正确我被返回null - 当然,如果我记录响应,我会看到通过我的控制台返回响应[' data']。有点无能为力getStatus()返回响应[' data']而不阻塞任何东西 - 但是,基本上我试图将sendCommand的响应返回给浏览器。我有困难

我可以在这里找到我使用的第三方模块: https://github.com/dy-dx/node-rcon/blob/master/node-rcon.js

1 个答案:

答案 0 :(得分:1)

您只需将回调包含为参数,也可以包含错误参数等

server.prototype.getStatus = function(callback){
    this.conn.sendCommand('status', function(err, response){

        if(err) {
            callback( err, null );
        } else {
            callback( null, response['data'] );
        }

    });
};

然后你用它

socket.on('get status', function(){
    server.getStatus(function(err, data) {
        if (!err) {
           io.emit('status', data);
        }
    });
});

你甚至可以做到

server.prototype.getStatus = function(callback){
    this.conn.sendCommand('status', callback);
}

socket.on('get status', function(){
    server.getStatus(function(err, data) {
        if (!err) {
           io.emit('status', data['data']);
        }
    });
});