2012-01-16 144 views
0
io.sockets.on('connection', function (socket) {     
    socket.on('requestGame', function (data) { 

    for (var game in games) 
     if (game.player2 === undefined) { 
      game.player2 = socket; 
      socket.emit('gameStart', { game_id: game.game_id, turn: !p1_turn }); // works 
      game.player2.emit('gameStart', { game_id: game.game_id, turn: !p1_turn }); // doesn't work 

为什么其中一条线路工作而另一条线路不工作?Socket.io插座手柄

这里是错误

game.player2.emit('gameStart', { game_id: game.game_id, turn: !game.p1_tur 
      ^
TypeError: Cannot call method 'emit' of undefined 
+0

如果你CONSOLE.LOG(game.player2),你看到了什么方法附着在物体? – oli 2012-01-16 05:15:53

+0

未定义,并且如果在此之后我记录了套接字对象,它就如预期的那样。这就像操作没有发生。 – mlihp 2012-01-16 05:22:05

回答

1

通过B的键的for (var a in b)语法迭代。每次通过循环时,a都将是一个字符串,而不是您可能正在寻找的b的值。

因为它是一个字符串和一个文字,附加一个属性到它将立即没有任何影响。您不能在Javascript中更改字符串和数字等文字。

'hello'.foo = 'world'; 
console.log('hello'.foo); // undefined 
var str = 'hello'; 
str.foo = 'world'; 
console.log(str.foo); // undefined 

什么你可能是指做的是

for (var key in games) 
     var game = games[key]; 
     if (game.player2 === undefined) { 
      game.player2 = socket; 
      socket.emit('gameStart', { game_id: game.game_id, turn: !p1_turn }); // works 
      game.player2.emit('gameStart', { game_id: game.game_id, turn: !p1_turn }); // doesn't work 
+0

真的很感激! – mlihp 2012-01-16 06:01:56