2015-04-28 115 views
2

我试图关闭所有websocket连接。不幸的是我得到了百达错误:如何关闭所有websocket连接

TypeError: s.close is not a function

我使用javascript很少,我无法找到错误...

var sockets = []; 

function addClient() { 

    var socket = new WebSocket("ws://localhost:8080/WebsocketHome/notification"); 
    socket.onmessage = function (event){ 
     [...] 
    }; 

    sockets.push(socket); 
} 


function removeAllClients(){ 
    for(var s in sockets){ 
     s.close(); 
    } 
} 
+0

它有可能是你有某些东西*其他*被推入阵列?如果你只是看一下控制台窗口中的套接字:它包含了什么? –

+0

hm'console.log('s:'+ s)'打印s:0,s:1,s:2,... – dit

+0

看起来你的'sockets.push(套接字);'插座。在你推它之前,'console.log'它。 – vaso123

回答

2

for给你的钥匙(分别是:数组索引中这种情况),而不是价值;您需要:

for(s in sockets) 
    sockets[s].close(); 
+0

是的,你的关于伐木的评论,帮助我理解这个问题。为了公平起见,我将你的答案标记为已接受 – dit

2

不可思议的,但是这个代码:

function removeAllClients(){ 
    for(var s in sockets){ 
     s.close(); 
    } 
} 

叠代索引。所以我现在这样做:

function removeAllClients(){ 

    sockets.forEach(function(s) { 
     s.close(); 
    }); 

} 

它的工作原理。我真的很惊讶......