Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript socket.io,如何从函数中获取事件名称?_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript socket.io,如何从函数中获取事件名称?

Javascript socket.io,如何从函数中获取事件名称?,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,在node.js和socket.io中,一个函数可以处理许多事件: 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

node.js
socket.io
中,一个函数可以处理许多事件:

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;
  }
}

如何获取事件名称,例如与
socket.on()
关联的'async.enum_标记?

我认为事件名称不会报告给回调函数。您可以尝试以下方法:

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]);

此外,您可以使用“添加”来添加Req.I.事件,该事件存储事件名称和Req.I.NeSPACE,存储事件名称的第一部分,由“:”:./P>拆分,您应该考虑将附加参数作为参数传递给绑定:<代码> Socket。on(E,行,绑定(套接字,E));code>然后您还可以去掉另一个函数,并使(…)socket.on(events[i],rows.bind(socket,events[i])的循环成为

@Matt Bradley-我就是这么发现的-没有提到这个名字。这似乎与我的直觉背道而驰,尤其是考虑到节点中的其他所有内容似乎都被详尽地链接在一起。