不能用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);