我在SocketIO上遇到一个奇怪的问题,在服务器端我发出了以下内容:
$s.sockets.emit(scope, {some: datas},
function(feedback) {
console.log('received callback');
}
);
在客户端,我这样做:
this.Socket.on(handler, function (datas, callback) {
callback('test');
}
我正在等待客户端发送服务器将收到的
callback('test')
。然后它将输出一个简单的console.log('received callback')
客户端有效地接收了服务器请求,但是在客户端,回调类型是
null
(对象)而不是function
...如果我在服务器端删除了function()
,而不必等待回调客户端上的类型将为undefined
,这意味着当服务器需要回调时,function
会以某种方式传输但会转换为对象(?)是虫子吗?我在这里做错什么了吗?真的很奇怪 ...
更详细一点:我目前正在使用SocketIO 0.9.16
谢谢大家;)
最佳答案
好的,我没有找到通过emit()
功能获取回调的任何解决方案。所以我做了一个“技巧”,这是一个并行的解决方案:
当我在服务器端进行emit()
涉及callback()
的操作时,我将通过一个函数生成一个密钥,并发送数据,并在我的datas对象的末尾添加一个{ callback : key }
。
我还将生成一个socket.on(key, function(datas) { callback(datas); socket.removeListener(key); }
,它等效于最后的系统中的经典回调。
前面将对此有所了解,它将对此做出响应。服务器将接收所有内容,执行操作并删除侦听器。
就像魅力一样,但是起初有点复杂。如果可以直接与SocketIO一起使用,那会很好。
如果有人卡住,我希望这会有所帮助:)