不能用socket.io使用非匿名方法,“listener”参数必须是一个函数

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

我是一个试图适应networking市场的Java开发人员,但作为一个面向对象,许多事情让我感到困扰。

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 

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

那么,有没有办法把代码分解成更小的函数呢?

奖金问题:是否有可能将事件拆分成多个.js文件?

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

你正在传递函数onPlayerDisconnected的结果(这看起来是undefined因为没有返回)到socket.on('disconnect')处理程序,而不是它正在寻找的实际函数onPlayerDisconnected

更改下面的代码,通过onPlayerDisconnected(socket)的结果

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

这个代码只是传递onPlayerDisconnected的实际函数

socket.on('disconnect', onPlayerDisconnected);