在我的多用户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)?
我的担忧有效吗?如果是这样,解决方案是什么?
答案 0 :(得分:1)
没有。 Node.js是单线程的。因此,一次只能执行一个功能。您描述的问题仅适用于多线程环境。
例如,尽管removeUser('user1')
和removeUser('user3')
已准备好执行,但它们将被推入队列中。 Node.js引擎将获取前面的元素并执行它,一旦完成执行,就从队列中选择下一个项目。因此,user1
将首先删除,然后user3
。