我做了一些东西来缩小我的socket.on()代码。
在此上下文中,我已经使用
获取客户端套接字...
var io = require('socket.io').listen(...);
io.sockets.on('connection', function(socket) {
// my code for this client
...
});
在我有这个之前
socket.on('event1', function(args1) {callback1(args1);});
socket.on('event2', function(args2) {callback2(args2);});
...
socket.on('eventN', function(argsN) {callbackN(argsN);});
现在我有了
var events = {
event1: 'callback1',
event2: 'callback2',
...
eventN: 'callbackN'
};
for(var event in events) {
var callback = events[event];
socket.on(event, function() {
this[callback].apply(this, arguments);
});
}
看来callbackN函数总是被调用。 当使用args1触发event1时,使用args1调用callbackN,当使用args2触发event2时,使用args2调用callbackN。
有什么问题?
答案 0 :(得分:0)
这应该有效:
var events = {
event1: 'callback1',
event2: 'callback2',
...
eventN: 'callbackN'
};
var setCB = function(ev) {
var callback = events[ev];
socket.on(event, function() {
this[callback].apply(this, arguments);
});
};
for (var event in events) {
setCB(event);
}
blog post很好地解释了您所看到的奇怪或非直观行为。
希望它有所帮助。
答案 1 :(得分:0)
我遇到了同样的问题,请在接受的答案中看到这里的工作解决方案: socket.io, adding message handler dynamically