当阵列已经从其他地方异步更改时,防止更改阵列?

时间:2014-04-07 04:22:13

标签: javascript arrays node.js asynchronous

在我的多用户live nods.js应用中,我有一个removes a specific element from an array的函数。它是一个asyn函数,并且可能由两个不同的用户独立调用,并且可能同时(客户端站点套接字触发器)在同一个阵列上执行操作。

myUsers= [];
myUsers.push('user1');
myUsers.push('user2');
myUsers.push('user3');

function removeUser(user){
    for(var i=0; i<=myUsers.length; i++){
        if(user===myUsers[i]){
            myUsers.splice(i,1);
            break;
}   }   }

我是否应该担心由于两个操作同时发生而导致删除错误/非预期的元素?比如,removeUser('user1')removeUser('user3')同时被调用(客户端站点套接字触发器),而user1正在被拼接,而user3已达到{ {1}}它可能会删除i=2而不是user2?并且user3现在甚至可以超过循环的原始限制(myUsers.length)?

我的担忧有效吗?如果是这样,解决方案是什么?

1 个答案:

答案 0 :(得分:1)

没有。 Node.js是单线程的。因此,一次只能执行一个功能。您描述的问题仅适用于多线程环境。

例如,尽管removeUser('user1')removeUser('user3')已准备好执行,但它们将被推入队列中。 Node.js引擎将获取前面的元素并执行它,一旦完成执行,就从队列中选择下一个项目。因此,user1将首先删除,然后user3