gpt4 book ai didi

javascript - 不能对 socket.io 使用非匿名方法, "listener"参数必须是一个函数

转载 作者:行者123 更新时间:2023-11-30 11:38:49 25 4
gpt4 key购买 nike

我搜索了这个(简单?)问题的答案,但找不到任何明确的答案。

我是一名试图适应网络市场的 Java 开发人员,但作为 OOP,许多事情让我感到愤怒。

io.sockets.on('connection', function (socket) {
console.log("Client has connected! id = [" + socket.id + "]");

socket.on('disconnect', onPlayerDisconnected(socket));
});

function onPlayerDisconnected(socket) {
socket.broadcast.emit('player_disconnected', socket.id);

console.log("Client has disconnected! id = [" + socket.id + "]");
}

这是堆栈跟踪:

events.js:219
throw new TypeError('"listener" argument must be a function');
^

TypeError: "listener" argument must be a function

如果我使用匿名函数,它就像一个魅力。问题是,如果我对(增加的)事件数量使用react,代码将无法维护。

那么,有什么方法可以将代码分解成更小的函数吗?

额外的问题:是否可以将代码事件拆分到多个 .js 文件中?

非常感谢,
node.js 初学者。

最佳答案

您正在将函数 onPlayerDisconnected 的结果(似乎是 undefined 因为没有返回任何内容)传递给 socket.on('disconnect ') 处理程序,而不是它正在寻找的实际函数 onPlayerDisconnected

更改下面的代码以传递 onPlayerDisconnected(socket) 的结果

socket.on('断开连接', onPlayerDisconnected(socket));

这段代码只是传递了实际函数 onPlayerDisconnected

socket.on('disconnect', onPlayerDisconnected);

关于javascript - 不能对 socket.io 使用非匿名方法, "listener"参数必须是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43414244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com