2012-01-16 139 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