Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 分解JS函数_Javascript_Node.js_Express_Sockets_Socket.io - Fatal编程技术网

Javascript 分解JS函数

Javascript 分解JS函数,javascript,node.js,express,sockets,socket.io,Javascript,Node.js,Express,Sockets,Socket.io,我试图简化我的代码并将其分解为多个文件。例如,我设法做到了: socket.once("disconnect", disconnectSocket); 然后有一个名为disconnectSocket的单独函数,它可以访问socket对象,如下所示: const disconnectSocket = socket => { .... }; 我正试图用这种模式做一些类似的事情: socket.on(EVENT_NAME, params => { ... }); 我可以做的

我试图简化我的代码并将其分解为多个文件。例如,我设法做到了:

socket.once("disconnect", disconnectSocket);
然后有一个名为
disconnectSocket
的单独函数,它可以访问
socket
对象,如下所示:

const disconnectSocket = socket => {
  ....
};
我正试图用这种模式做一些类似的事情:

socket.on(EVENT_NAME, params => {
   ...
});
我可以做的是:

socket.on(EVENT_NAME, myFunc);

const myFunc = (socket, params) => {
  ...
}

但这是失败的,并且说
参数未定义
。我做错了什么?

您可以实现这一点,但您的函数签名不正确。处理程序将只接受一个参数。请注意,一些类似的
重新连接\u失败
不会传递任何参数

将您的签名更改为:

socket.on(EVENT_NAME, myFunc);

const myFunc = (message) => {
  ...
}
如果要访问套接字,请执行以下操作:

socket.on(EVENT_NAME, (message) => myFunc(socket, message));

const myFunc = (socket, message) => {
  ...
}
我使用的正是这种模式:

socket.on(constants.events.game.deployUnit, (message) => {
    deployUnit(socket, message);
});

socket.on(constants.events.game.skipOpponent, (message) => {
    skipOpponent(socket, message);
});

socket.on(constants.events.game.logDefenderKill, (message) => {
    logDefenderKill(socket, message);
});

在您的工作示例中,回调函数接受1个参数(
params
),为什么您认为该函数现在接受上一个代码段中的2个参数?我想我误解了-因为在第一个使用disconnectSocket的示例中,我可以通过将套接字作为funclet的第一个参数来传递套接字,让我重新措辞,如何访问
myFunc
内的
socket
params
?我是否也能够访问
myFunc
内的
socket
?我需要这个来拉出socketID等-我可以做一些类似于
socket.on(EVENT_NAME,myFunc(socket,params))的事情吗constmyfunc=(套接字,参数)