我的代码遇到了一些非常奇怪的事情。我有一个使用套接字更新聊天室的功能。一切都很顺利,直到我得到房间里的客户数量。
function updateChatRoom(user, gender, vip, firstname, message, latitude, longitude, room, updateUser)
{
const messageDetails =
{
gender: gender,
vip: vip,
firstname: firstname,
content: message
}
/*********** IF I DELETE THIS IF STATMENT, IT SENDS TO THE USER ********/
if (user.in('/').adapter.rooms[room].length)
{
messageDetails.roomLength = user.in('/').adapter.rooms[room].length;
}
/*********** IF I DELETE THIS IF STATMENT, IT SENDS TO THE USER ********/
if (latitude && longitude && typeof latitude == 'number' && typeof longitude == 'number')
{
messageDetails.latitude = latitude;
messageDetails.longitude = longitude;
}
if (updateUser)
{
console.log("sending to user"); //Always runs, regardless if the if statment is there or not
user.emit('incomingChatMessage', messageDetails); //I only receive this if i delete that if statment
}
user.in(room).broadcast.emit('incomingChatMessage', messageDetails); //Always runs
}
所以如果你能看到if语句在中间。这可以获得这个房间里的人数。从测试和调试,我可以看出它是正确的。但是,当它在那里时,user.emit不会运行,或者如果它运行,它不会向用户发送任何内容。
我知道updateUser也是如此,因为它总是将“发送给用户”记录到控制台。
如果我只是删除if语句,它会正常发送。我唯一的猜测是,当我检查房间长度时,我正在更改用户的属性,以便它不再被发送给他们了?我完全不知道。
此外,发出除客户端之外的所有人的消息的最后一行,无论是否使用if语句都可以。
答案 0 :(得分:1)
将if
代码放入try...catch
块,并将异常打印到控制台日志中。我认为你的代码中有某处try...catch
阻塞,catch
为空,什么都不做。