在我的多用户实时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已到达i=2时,它可能会删除user2而不是user3?而且i甚至可能现在超过了循环的原始限制(myUsers.length)?

我的担忧有效吗?如果是这样,将如何解决?

最佳答案

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

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

关于javascript - 防止在已经从其他位置进行异步更改的情况下更改数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22903562/

10-10 21:44