对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
答案 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']);
}
});
});