删除套接字断开连接上的用户对象会导致主循环出错

时间:2017-02-17 04:34:44

标签: javascript sockets socket.io

我有一个游戏,其主循环类似于:

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

我认为这可能是因为断开连接是异步的。我该如何解决这个问题?

1 个答案:

答案 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循环。