当它已经被asynchronous地从别的地方改变时,防止改变数组?

在我的多用户live nods.js应用程序中,我有一个从数组中删除特定元素的函数。 这是一个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而不是user3i甚至可能现在超过循环的原始限制(myUsers.length)?

我的担心是否有效? 如果是这样,那么解决scheme是什么?

Node.js是单线程的。 所以,一次只能执行一个函数。 您所描述的问题仅限于multithreading环境。

例如,尽piperemoveUser('user1')removeUser('user3')已经准备好执行,但是它们将被推入队列中。 而且Node.js引擎会把前面的元素放到前面执行,一旦执行完,就从队列中选取下一个元素。 所以, user1将被删除,然后user3