这实际上是一个更抽象的问题。我如何确保不会错过 WebSocket 的 open 事件?据我了解,只要我调用构造函数,浏览器就会开始建立连接,所以如果事情不顺利,可能会在连接这些事件的处理程序之前触发一个打开(或错误)事件。
var socket = new WebSocket("ws://www.example.com");
/*Because I'm an unlucky guy, the open-event fires before the next line*/
socket.addEventListener("open", function(event){...});
在这种情况下,我的 open-Handler 永远不会被调用。这很可能从来都不是真正的问题,因为建立连接比执行下一行 JavaScript 花费的时间更长。但是,对于 XMLHttpRequest 也可以这样说,推荐的顺序是:
var ajax = new XMLHttpRequest();
ajax.addEventListener("load", function(event){...});
ajax.open();
ajax.send();
这样可以确保事件不会丢失。为什么 WebSocket 在这方面有所不同?我是否忽略了某些事情并且错过了该事件并不是真正的问题?
感谢您对此进行澄清。