Javascript 使用变量命名套接字消息时无法发出套接字

Javascript 使用变量命名套接字消息时无法发出套接字,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我的客户端脚本中有以下代码片段: socket.on('bla', function(data) { if (data == ID) { console.log('What the hell is happening?'); } }) socket.on(ID, function(data) { console.log('here:'); console.log(data); console.log(ID); }); 我的服务器脚本中的这

我的客户端脚本中有以下代码片段:

socket.on('bla', function(data) {
    if (data == ID) {
        console.log('What the hell is happening?');
    }
})
socket.on(ID, function(data) {
    console.log('here:');
    console.log(data);
    console.log(ID);
});
我的服务器脚本中的这段代码:

io.sockets.emit('bla', pairs[pairs.length-1][0].ID);
io.sockets.emit(pairs[pairs.length-1][0].ID, 'go');
这将导致客户端控制台输出

到底发生了什么事


但不输出任何其他内容。这意味着服务器上的
pairs[pairs.length-1][0].ID
与客户端上的
ID
相同,但由于某些原因,当我将它们用作套接字消息名称时,它无法匹配

您是否尝试交换侦听器?把第二个放在第一个位置

另外,检查,先注释
emit

我想出来了。 我必须将整个socket.on(ID,…)移动到函数中,一旦客户端从服务器套接字接收到它们的ID,该函数就会被激活。否则,当执行该行时,ID是未定义的,因此事件侦听器侦听未定义的。。。而不是客户端的实际ID。
感谢大家的帮助。

ID是字符串吗?我假设套接字事件名称需要是一个字符串。是的,ID是一个字符串{你的bla测试是否仍然打印出“到底发生了什么事?”是的,确实如此!!这太令人沮丧了……你为什么要开始使用动态事件名称?这通常会让接收端的生活更加艰难。为什么不使用像bla这样的静态事件名称呢?