2014-02-09 73 views
0

這是直接從專業Node.js書。我瞭解代碼的邏輯,但我不明白「oldroom」在哪裏出現!第二行對我來說非常混亂。在這裏,我們希望將套接字與房間相關聯。爲什麼我們在做socket.get('room',.....)時,套接字尚未加入到第二行的房間中。我們可以省略第2和第3行嗎?專業Node.js代碼中的疑問

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

我不明白從哪裏 「oldroom」 出現!

oldRoom出現」或聲明爲回調function命名的論點,即2號線啓動:當socket.get()最終調用這個function

socket.get('room', function(err, oldRoom) { 
//        ^^^^^^^ 

其價值將被確定。


我們可以省略第二和第三個行?

可能不是。

的片段似乎是限制用戶,當他們請求'join'一個單一room

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

    // ... 
    });