5

我做了一些东西来缩小我的 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 函数。当 event1 用 args1 触发时,callbackN 用 args1 调用,当 event2 用 args2 触发时,callbackN 用 args2 调用。

怎么了 ?

4

1 回答 1

2

这应该工作:

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);
}

这篇博文很好地解释了您所看到的奇怪或不直观的行为。

希望能帮助到你。

于 2013-10-02T14:22:56.627 回答