javascript - 如何在 setInterval(function(){...}) 中传递 Server Sent Event 对象

标签 javascript setinterval server-sent-events

我想在一段时间后停止 SSE 并需要重新连接。

在 JavaScript 中使用 setInterval(function(){}) 会出现错误:

source.close(); // <<-- ERROR : object is not defined

谁能指导我解决问题?

<script>

if(typeof(EventSource) !== "undefined"){

    var source = new EventSource("sse_server.php");

    // ReConnecting ST
    setInterval(function(){ 
        console.log("ReConnecting...");

        source.close(); // <<---------- ERROR : object is not defined

        var source = new EventSource("sse_server.php");
    }, 6000); 
    // ReConnecting EN

    source.addEventListener("response", function(event) {
         document.getElementById("result").innerHTML += "<p>" + event.data + "</p>";
    });

    source.addEventListener("message_status", function(event) {
         document.getElementById("result").innerHTML += "<p>" + event.data + "</p>";
    });

    source.onmessage = function(event) {

        var json = JSON.parse(event.data);

        if(json.category=="chat") {
            document.getElementById("result").innerHTML += "<p>"  + json.content.messageContent.messageText + "</p>";
        }else{
            document.getElementById("result").innerHTML += "<p>" + event.data + "</p>";
        } 

  };

} else {
  document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
}


</script> 

最佳答案

看看这个:

source.close(); // <<---------- ERROR : object is not defined
var source = new EventSource("sse_server.php");

您在函数范围内定义了一个不同的变量,其名称相同。因为直到下一行才给它赋值,所以它是 undefined

如果您想从函数内更广泛的范围访问源代码,则不要在函数内为不同的变量重用该名称。

如果你想覆盖更广泛的变量中的source,那么从函数内部的行中删除var,这样你就可以使用现有的变量并且不要在本地范围内重新声明它。

关于javascript - 如何在 setInterval(function(){...}) 中传递 Server Sent Event 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55376157/

相关文章:

javascript - 数字正在改变值(value)

javascript - 提醒输入时间返回不正确

javascript - Phaser Sprite map 定位

javascript - 在 SetInterval 函数之外更新变量值

javascript - 服务器端 setInterval/clearInterval 与 Meteor

javascript - 函数根据 setinterval 循环但具有不同的参数

server-sent-events - 哪些移动浏览器支持 EventSource 规范中所述的 "connectionless push"?

java - 带代理的 SseEmitter

javascript - 当客户端浏览器退出时如何终止node.js服务器连接?

javascript - 无法使用 Protractor 定位同一祖 parent 的孙元素