这直接取自Professional Node.js一书。我理解代码的逻辑,但我不明白“oldroom”出现在哪里!第二行对我来说很困惑。在这里,我们希望将套接字与房间相关联。套接字还没有加入房间所以在第二行为什么我们要做socket.get('room',.....)。我们可以省略第2行和第3行吗?
socket.on('join', function(room) {
socket.get('room', function(err, oldRoom) {
if (err) { throw err; }
socket.set('room', room, function(err) {
if (err) { throw err; }
socket.join(room);
if (oldRoom) {
socket.leave(oldRoom);
}
socket.get('username', function(err, username) {
if (! username) {
username = socket.id;
}
});
socket.emit('serverMessage', 'You joined room ' + room);
socket.get('username', function(err, username) {
if (! username) {
username = socket.id;
}
socket.broadcast.to(room).emit('serverMessage', 'User ' +
username + ' joined this room');
});
});
});
});
答案 0 :(得分:0)
我不明白“旧房”出现在哪里!
oldRoom
“出现”或被声明为从第二行开始的回调function
的命名参数:
socket.get('room', function(err, oldRoom) {
// ^^^^^^^
当socket.get()
最终调用此function
时,将确定其值。
我们可以省略第2行和第3行吗?
可能不是。
该代码段在向room
提出请求时似乎将用户限制为单个'join'
:
socket.on('join', function(room) {
// ...
});
第2-3行将用户的当前'room'
检索为oldRoom
:
socket.get('room', function(err, oldRoom) {
if (err) { throw err; }
// ...
});
并且,如果他们实际上在oldRoom
,那么他们将会.leave()
:
if (oldRoom) {
socket.leave(oldRoom);
}
.join()
已请求的room
,更新'room'
下一个'join'
请求:
socket.set('room', room, function(err) {
if (err) { throw err; }
socket.join(room);
// ...
});