Javascript 捕获WebSocket异常:“捕获WebSocket异常”;WebSocket握手时出错:意外响应代码:503“;

Javascript 捕获WebSocket异常:“捕获WebSocket异常”;WebSocket握手时出错:意外响应代码:503“;,javascript,web,websocket,Javascript,Web,Websocket,我正在尝试实现一个WebSocket连接,当我的站点关闭时,它会尝试每隔X秒重新连接自己,直到它再次联机。到目前为止,我得到了这个: var onCloseHandler = function() { reconnect(); } function reconnect() { try { console.log('Connection lost, trying to reconnect...'); socket = new WebSocket(m

我正在尝试实现一个WebSocket连接,当我的站点关闭时,它会尝试每隔X秒重新连接自己,直到它再次联机。到目前为止,我得到了这个:

var onCloseHandler = function() {
    reconnect();
}

function reconnect() {
    try {
        console.log('Connection lost, trying to reconnect...');
        socket = new WebSocket(myUrl);

        socket.onerror = onErrorHandler;
        socket.onmessage = onMessageHandler;
        socket.onopen = onOpenHandler;
        socket.onclose = onCloseHandler;
    } catch (err) {
        setTimeout(function() {
            reconnect();
        }, 1000);
    }
}
我的问题是,当第一次调用
onCloseHandler
时(即当我的站点突然脱机时),
new WebSocket()
调用会引发下一个异常:

WebSocket到“”的连接失败:WebSocket握手期间出错:意外响应代码:503

而且无法捕捉它(在X秒时间内再次调用同一个函数)或使执行移到下一行。它只是崩溃,通过浏览器的控制台显示异常,并停止执行

是否有任何方法可以捕获此异常

提前谢谢


编辑:为了清楚起见,
onclose
事件不会被第二次调用,我已经检查过了。此外,例外情况(因此,当站点离线时无法连接)也可以;我正在寻找一种方法来检测它,并将执行驱动到
catch
块的
setTimeout

我最终使用了以下方法:

function reconnect() {
    console.log('Connection lost, trying to reconnect...');
    $.ajax({
        url: dummy_http_url_on_the_same_server
        success: function() {
            //Server is back online
            socket = new WebSocket(myUrl);
            socket.onerror = onErrorHandler;
            socket.onmessage = onMessageHandler;
            socket.onopen = onOpenHandler;
            socket.onclose = onCloseHandler;
        },
        error: function() {
            //Server is still down
            setTimeout(function() {
                reconnect();
            }, 1000);
        }
    });
}
由于Ajax调用有一个错误处理程序,我使用它们每X秒检查一次(在本例中,每1秒检查一次;在我的应用程序中是一个随机数,以避免所有客户端同时连接)我的服务器是否重新联机。当出现异常时,我实例化websocket,确信它不会在服务器再次启动时抛出异常


不完全是我希望找到的,但至少它起作用了。

是否调用了
onErrorHandler
?另外,您是否确定
新WebSocket()
确实引发了异常(而不是记录错误)?尝试在构造函数之后添加一个
console.log
,以验证执行是否已停止。@levi否,未调用
onErrorHandler
。另外,如果我在构造函数之后添加一个
console.log
,则不会显示它(在显示构造函数之前的那一个)。