我有一个游戏,其主循环类似于:
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
我认为这可能是因为断开连接是异步的。我该如何解决这个问题?
答案 0 :(得分: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
循环。