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

Boy*_*ang 3 javascript sockets websocket socket.io

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

喜欢:

socket.on("myEvt", myEvtHandler);

myEvtHandler(socket, additionalInfo, data) {//some stuff here}
Run Code Online (Sandbox Code Playgroud)

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

(function(socket, addtionalInfo) {
    socket.on("myEvt", function(data) {
        myEvtHandler(socket, addtionalInfo, data);
    });
})(socket, addtionalInfo);
Run Code Online (Sandbox Code Playgroud)

它是否正确?还有更好的方法吗?

rob*_*lep 7

您可以使用bind以下命令创建部分函数:

socket.on("myEvt", myEvtHandler.bind(null, socket, additionalInfo));
Run Code Online (Sandbox Code Playgroud)

bind()会返回一个函数已经"填入"前两个参数.传递给bind()(null在这种情况下)的第一个参数将是this您的处理程序中的对象(更多信息).

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

function myEvtHandler(socket, additionalInfo, data) { ... }
Run Code Online (Sandbox Code Playgroud)

同样,这会(几乎)相同:

socket.on("myEvt", function(data) {
  myEvtHandler(socket, additionalInfo, data);
});
Run Code Online (Sandbox Code Playgroud)