问题:
从服务器上查看以下代码段:
io.of("/chat").on("connection", socket => {
socket.on("joinRoom", (room, name) => {
chatRooms.forEach(chatRoom => {
console.log(chatRoom);
if (chatRoom.users.includes(name.toLowerCase())) {
console.log("hello");
return socket.emit("err", "Username already been taken");
} else {
chatRoom.users.push(name.toLowerCase());
socket.join(room);
io.of("/chat")
.to(room)
.emit("newUser", "New user has joined the room");
return socket.emit("success", "Joined room ", room);
}
});
});
});
尤其是这一行:return socket.emit("err", "Username already been taken");
我这样在客户端捕获它:
socket.on("err", msg => console.error(msg));
所以在客户端上,我有一个简单的表格。此表单向服务器发出“ joinRoom”事件,并提供名称和房间名称。
第一次工作(因为用户是第一个出现在该房间中的人)。第二次单击后,它会发出我上面提到的错误。
我在客户端成功捕获了它。但是问题是,控制台显示了几个输出(看一下红色控制台中的“ 2”。截图上的错误):
这是我要登录但已被使用时的控制台输出。我收到了两次消息。当我再次单击时,它看起来像这样:
所以我的问题是,为什么此事件在第一次点击时被发射2次,而在第二次点击时被发射3次(该数字随着我点击的次数的增加而变得越来越高)。
我知道它没有破坏任何东西,但我只是想了解为什么它会做这种奇怪的事情。
谢谢!