用户登录到应用程序并启动连接并注册处理程序以重新启动SignalR
连接(如果像这样丢失)
connection.onclose(this.restartConnection);
我浏览了HubConnection.ts
,但没有找到任何删除onclose
处理程序的选项。它不能用空方法代替,因为它存储了所有已注册的方法。然后只有一个选项可以通过
connection.off('methodName');
[当用户注销时,应用程序将在其处停止SignalR
连接,这不可避免地会触发onclose
处理程序,最终对我来说是错误。我要注销处理程序,以便在应用程序故意将其停止后,连接将不会尝试重新启动自身。
我考虑过使用一个标志来决定是否应该尝试重新启动连接,但这对我来说似乎不正确。有适当的解决方案吗?
不知道这是否能回答确切的问题,但是在AngularJS $ scope中,可以像这样完成onclose事件处理程序的注销:
connection.onclose(onCloseHandler);
var onCloseHandler = function() {
// Your callback function's contents...
}
$scope.$on('$destroy', function () {
onCloseHandler();
});