【发布时间】:2016-07-12 03:40:10
【问题描述】:
我正在使用 Node.js 和 Socket.io 编写一个小型聊天应用程序。我有一个对象connections,它保留对所有实时连接的引用,例如(伪代码):
var connections = {};
...
io.on("connection", function(socket)){
connections[socket.id] = socket; // (1)
socket.on("disconnect", function(){
delete connections[socket.id]; // (2)
});
}
现在在代码的另一部分我迭代连接对象,例如:
for (var i=0; i<connections.length; i++) {
// do something with connections[i] // (3)
}
问题:当循环运行(3) 时,套接字的disconnect 事件是否会从connections 对象中删除一个项目(2) 并引发错误?如果是这样,最佳做法是什么?
我可以将其“标记”为删除,并且仅在循环完成后将其删除,但是有必要吗?谢谢!
【问题讨论】:
-
不,JavaScript 是单线程的。当循环运行时,没有其他代码可以运行。
标签: javascript node.js concurrency socket.io