2015-04-28 114 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(); 
    }); 

} 

它的工作原理。我真的很驚訝......