如何为socket.on()传递更多参数

时间:2013-10-13 07:54:31

标签: javascript sockets websocket socket.io

对于socket.on(“someChannel”,handler),我希望将我的处理函数提取到另一个文件中。因此,它们需要在套接字obj中传递,还有一些额外的信息。

像:

socket.on("myEvt", myEvtHandler);

myEvtHandler(socket, additionalInfo, data) {//some stuff here}

但我不能。我能想到的最好的就是关闭:

(function(socket, addtionalInfo) {
    socket.on("myEvt", function(data) {
        myEvtHandler(socket, addtionalInfo, data);
    });
})(socket, addtionalInfo);

这是对的吗?还有更好的方法吗?

1 个答案:

答案 0 :(得分:7)

您可以使用bind创建部分功能:

socket.on("myEvt", myEvtHandler.bind(null, socket, additionalInfo));

bind()将返回一个函数,前两个参数已经“填入”。传递给bind()的第一个参数(在本例中为null)将成为处理程序中的this对象(more info)。

socket.io传递给处理程序的任何其他参数将从第三个参数开始提供:

function myEvtHandler(socket, additionalInfo, data) { ... }

同样,这会(差不多)相同:

socket.on("myEvt", function(data) {
  myEvtHandler(socket, additionalInfo, data);
});