如何防止signalR错误停止进一步执行javascript
我正在开发一个asp.net mvc项目,我们在不同的视图中使用SignalR进行实时连接。 除了在SignalR出现问题时javascript的执行停止这一事实之外,效果很好。 通常,如果我的自托管应用程序关闭或发生其他连接问题,则此错误将成为问题。
GET http://localhost:8081/signalr/hubs net::ERR_CONNECTION_REFUSED List:328 Uncaught TypeError: Cannot read property 'client' of null
如上所述,如果发生这种情况,它会阻止我的所有其他javascript执行,从而无法正确呈现我的视图或布局。 有没有办法解决这个问题,所以视图继续加载并运行其javascript?
我的典型视图如下所示:
@model Services.Models.SomeModel ...
连接器看起来像这样:
$.connection.hub.url = "http://localhost:8081/signalr"; //Enable logging $.connection.hub.logging = true; // Proxy created on the fly var messageHub = $.connection.myHub; if (messageHub == null) return null; messageHub.client.timeEnabled = true; ... ommitted functions ... $.connection.hub.start(function () { var id = $('#signalRId').text(); messageHub.server.joinGroup("operationStatus-" + id); console.log("Joined group: operationStatus-" + $('#signalRId').text()); }).done(function () { console.log('Now connected, connection ID=' + $.connection.hub.id); } ).fail(function () { console.log('Could not Connect'); });
不完全确定你要求的是什么,但这是我的想法 – 你的基本工具是……
-
检查有问题的条件
if (messageHub) { // set up client hub methods and start connection ... } else { // /signalr/hubs script didn't load properly, so skip setting up signalr }
-
使用try / catch(对于可能导致问题但不太可预测的事情); 读取
jquery.signalR-*
以查看SignalR代码可能抛出的错误 -
使用window.onerror的全局error handling程序( 另请参阅此SOpost ):
window.onerror = function(message, url, lineNumber) { console.log(message); };
我也有这个问题。 一种简单的方法是在完成的回调中设置一个布尔值。
connected = true;
然后在每个请求之前检查。
我给我写了一个免费的函数库,它包含了我所有的SignalR内容,并给了我成功和错误回调。 在这种情况下,我会得到一个内容为“未连接”或其他内容的errorCallback。 使用lib,您只需编写一次。