<button onclick="hoge()">hoge</button>
<script>
function hoge(){
if(es){
es.close()
}
var es = new EventSource('/hoge')
es.onmessage = function(e) {
console.log(e)
}
}
</script>
我想节省资源,因此单击并开始连接EventSource。
每次单击都会启动新的连接,因此我想断开以前的连接。
我尝试了上面的代码,但是没有用。我该怎么办。
答案 0 :(得分:1)
第二次调用该函数时,您没有第一个EventSource
的实际范围,因此即使您有一个es
,变量EventSource
还是空的已经实例化。
我不确定为什么首先要关闭并重新创建EventSource,但这是解决您确切问题的方法:
尝试一下:
<script>
var eventSource;
function hoge(){
if(eventSource){
eventSource.close()
}
eventSource = new EventSource('/hoge')
eventSource.onmessage = function(e) {
console.log(e)
}
}
</script>
请记住,eventSource
位于全局范围内(换句话说,它在浏览器的上下文中直接附加到窗口对象),因此您可能需要包装一个模块或至少另一个功能中的整个代码。简而言之,使用此:
<script>
(function() {
var eventSource;
function hoge(){
if(eventSource){
eventSource.close()
}
eventSource = new EventSource('/hoge')
eventSource.onmessage = function(e) {
console.log(e)
}
}
})();
</script>