在我的多用户实时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/