3

node.jsおよびではsocket.io、多くのイベントを 1 つの関数で処理できます。

socket.on( 'async.popular_qtns', rows.bind(socket) );
socket.on( 'async.recent_qtns', rows.bind(socket) );
socket.on( 'async.enum_chn', rows.bind(socket) );
socket.on( 'async.enum_tag', rows.bind(socket) );

function rows() {
  var socket = this;
  switch( socket.?? ) {
    case 'async.popular_qtns': // blah blah
        break;
    case 'async.recent_qtns': // blah blah
        break;
  }
}

に関連付けられた「async.enum_tag」などのイベント名を取得するにはどうすればよいsocket.on()ですか?

4

2 に答える 2

3

イベント名はコールバック関数に報告されていないと思います。次のようなことを試すことができます:

var rowsBound = rows.bind(socket);

socket.on( 'async.popular_qtns', function() { rowsBound('asyn.popular_qtns'); } );
socket.on( 'async.recent_qtns', function() { rowsBound('asyn.recent_qtns'); } );
socket.on( 'async.enum_chn', function() { rowsBound('asyn.enum_chn'); } );
socket.on( 'async.enum_tag', function() { rowsBound('asyn.enum_tag'); } );

または、おそらくより良い:

var rowsBound = rows.bind(socket),
    events = ['async.popular_qtns', 'async.recent_qtns', 'async.enum_chn', 'async.enum_tag'];

for (var i in events)
    (function(e) { socket.on(e, function() { rowsBound(e); }); })(events[i]);
于 2012-07-31T05:33:09.683 に答える