2017-02-17 1 views
0

У меня есть игра, которая имеет основной цикл, который идет что-то вроде:Удаление объекта пользователя на сокет разъединение вызывает ошибку в главном цикле

for (var i = 0; i < users.length; ++i) { 
    users[i].value--; 
    if (users[i].value) { 

    } 
} 

И пользователей подключается через гнездо:

io.on('connect', function(socket) { 
    var tmpUser = {}; 
    users.push(tmpUser); 
    socket.on('disconnect', function() { 
     users.splice(users.indexOf(tmpUser), 1) 
    }); 
}) 

Иногда, когда пользователь отключает это вызывает ошибку говоря:

Cannot read property .value of undefined 

Я думаю, что это может быть, потому что быть на диске onnect является асинхронным. Как я могу это исправить?

ответ

1

Я предположил бы, что что-то в .doSomething() изменяет структуру users данных таким образом, что users[i] больше не является значением после запуска .doSomething().

Вы можете исправить это изменение этого:

for (var i = 0; i < users.length; ++i) { 
    users[i].doSomething(); 
    users[i].doAnother(); 
} 

к этому:

var user; 
for (var i = 0; i < users.length; ++i) { 
    user = users[i]; 
    user.doSomething(); 
    user.doAnother(); 
} 

или переключение на .forEach() вместо вашего for цикла.

+0

У меня есть вопрос. Функции в основном делают то, что я добавил –

+0

@SidneydeVries. Значит, вы просто изменили вопрос на другой код. Наверное, я потратил время, пытаясь помочь. – jfriend00

Смежные вопросы