JavaScript WebSocket是否可能在添加open事件监听器前连接并错过事件?
不会错过
open 事件,原因如下: 虽然标准里说调用 new WebSocket() 会立即启动连接建立流程,但这里的“立即”指的是触发异步的连接初始化,而非同步完成整个连接过程。浏览器的事件循环机制会保证:
- 同步代码优先执行:你创建WebSocket实例后,紧接着添加
open监听器的代码是同步执行的,会在任何异步事件(包括open事件)触发前完成。 - WebSocket连接的建立属于异步任务:哪怕是本地localhost的高速链路,TCP握手、WebSocket协议握手这些步骤都被浏览器放在异步任务队列中处理,只有当当前同步执行栈清空后,才会去处理队列里的任务。
换句话说,就算连接在极短时间内建立完成,open事件也会被暂时挂起,等你把监听器添加完毕后,才会被触发并执行对应的回调。
你可以放心使用这种写法,不会出现错过open事件的情况。
内容的提问来源于stack exchange,提问作者bigjosh
相关产品推荐
相关产品推荐

