首页 > 解决方案 > 分解 JS 函数

问题描述

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

socket.once("disconnect", disconnectSocket);

然后有一个单独的函数调用disconnectSocket它可以访问socket对象如下:

const disconnectSocket = socket => {
  ....
};

我正在尝试用这种模式做类似的事情:

socket.on(EVENT_NAME, params => {
   ...
});

相反,我可以在哪里做:

socket.on(EVENT_NAME, myFunc);

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

但这是失败的说法params is undefined。我究竟做错了什么?

标签: javascriptnode.jsexpresssocketssocket.io

解决方案


您可以实现这一点,但您的函数签名不正确。处理程序将只接受一个参数。请注意,一些内置事件,例如reconnect_failed不传递任何参数。

将您的签名更改为:

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

推荐阅读