2017-04-14 16 views
1

私はこの質問に対する答えを探しましたが、何もわかりません。socket.ioで非匿名メソッドを使用することはできません。 "listener"引数は関数でなければなりません。

私はWebマーケットに収めようとする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 

私は無名関数を使用する場合、それは魔法のように動作します。問題は、(増加する)イベント数に反応すると、コードは維持できないということです。

コードを細かい関数に分解する方法はありますか?

ボーナスの質問:複数の.jsファイルでコードを分割することは可能ですか?

ありがとう、
node.js初心者。

+0

を含む実際の機能を[この通過このコードにonPlayerDisconnected(socket)

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

の結果を渡す以下のコード](http://stackoverflow.com/questions/5797852/in-node-js-how-do-i-include-functions-from-my-other-files) –

答えて

3

あなたはsocket.on('disconnect')ハンドラに(何も返されませんので、undefinedように見える)関数onPlayerDisconnectedの結果を渡すとしているではない実際の関数onPlayerDisconnectedそれが探しているものです。

変更だけで、別のファイルのチェックのためにonPlayerDisconnected

socket.on('disconnect', onPlayerDisconnected);

関連する問題