1

这是代码,PS:s10中的服务httpd已停止

        try {
            var source = new EventSource("http://s10/server.php");
            console.log(source);
        } catch (e) {
            console.log("ADSfasfasfasdfasdfas" + e)
        }

这是控制台: 在此处输入图像描述

为什么 try catch 没有捕捉到错误?

当然我有 onerror 事件和 onclose 事件:

        source.addEventListener('error', function(e) {
            if (source.readyState == 2) {
                connectionClosed();//to change some style
                console.log("Disconnected");
            }

        }, false);

        source.onerror = function(e) {
            if (source.readyState != 0) {
                connectionClosed();//to change some style
                console.log("Disconnected");
            }
        };
        source.onclose = function() {
            connectionClosed();//to change some style
            console.log('Connection closed');
        }
4

2 回答 2

0

我正在测试同样的东西,onerror并没有提供真正有用的信息。例如,如果您关闭服务器或在连接客户端时发送空响应,则无法在客户端以编程方式检测特定原因,我可以看到仅检查开发控制台。

于 2021-04-17T07:18:05.347 回答
0

当我在控制台中对未设置为处理 SourceEvents 的任意 URL 运行此操作时,控制台成功记录了 SourceEvent 实例。这和你描述的差不多。

源事件

所以我的猜测是没有错误可以捕捉。SourceEvent 实例已成功构造,即使没有实际连接。如果要检测连接是否正常,请使用该EventSource.readyState属性。

在我的屏幕截图中,您可以看到readyState = 0,这意味着连接正在“连接”,但实际上它永远不会完成连接,因为另一端的服务器未设置为处理 SourceEvents。

https://developer.mozilla.org/en-US/docs/Web/API/EventSource/readyState

于 2018-01-31T17:57:10.853 回答