如何关闭上一个EventSource

时间:2019-06-08 13:02:23

标签: html ecmascript-6 server-sent-events

<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。
每次单击都会启动新的连接,因此我想断开以前的连接。
我尝试了上面的代码,但是没有用。我该怎么办。

1 个答案:

答案 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>