很多HTML5的WebSocket示例代碼執行這樣的事情:html5/js websocket:*連接後設置事件處理程序*
websocket = new WebSocket('ws://example.com');
websocket.onopen = MyOpenHandler;
websocket.onerror = MyErrorHandler;
當然與MyOpenHandler
的意圖在連接被調用,或MyErrorHandler
如果連接失敗。
究竟何時進行實際連接發生,是上述事件處理保證工作方法,即使連接發生或失敗立即?
我的意思是,不會像這樣更有意義的方法:
websocket = new WebSocket;
websocket.onopen = MyOpenEventHandler;
websocket.onerror = MyErrorHandler;
websocket.connect('ws://example.com');
即在之後連接事件處理程序已被設置,100%確定它們在適當時被調用。
或者我只是在這裏偏執狂,並且是參考實現(最上面的例子)實際上是正確的嗎?
附錄
我做了下面的代碼一些額外的測試:
var websocket = new WebSocket("ws://localhost:8000"); // this connection will fail
alert("Created the websocket, now let's set the event handler");
websocket.onerror = function(e) { alert("Could not connect") }
失敗,該「無法連接」警報不會出現。但是,如果我刪除了以前的警報(第2行),它確實如此。
這有點讓我擔心。顯然,在我有機會設置onerror事件處理程序之前,連接可能已經失敗,因此處理程序永遠不會被調用。我怎麼能100%確定連接保證發生我設置了合適的處理程序?
https://developer.mozilla.org/en-US/docs/Web/API/WebSocket查看示例 – AthMav
這需要研究實際的WebSocket對象以查看它的行爲方式以及首先調用的方法 – sietse85
@AthMav是的,這就是我正在使用的,但我有點擔心事件處理程序在事件可能已經發生後被分配*的事實。 – RocketNuts