如何在 JavaScript SignalR 客户端取消注册 onclose 事件处理程序

3

用户登录应用程序并启动连接,如果连接丢失,则注册处理程序以重新启动 SignalR 连接,如下所示:

connection.onclose(this.restartConnection);

我查看了 HubConnection.ts,并没有找到任何删除 onclose 处理程序的选项。它不能被替换为空方法,因为它存储了所有已注册的方法。然后唯一的选择是通过以下方式删除自定义处理程序:

connection.off('methodName');

当用户注销时,应用程序停止 SignalR 连接,这将不可避免地触发 onclose 处理程序,对我来说会产生错误。我想取消注册处理程序,这样连接在应用程序有意停止之后将不会尝试重新启动。

我考虑使用一个标志来确定是否应该尝试重新启动连接,但这似乎不太合适。是否有一个正确的解决方案呢?


你能找到解决方案吗?我在一个React应用程序中遇到了同样的问题,在用户注销后,我正在尝试卸载signalr并解除onclose自动重新连接代码的绑定。 - James
1个回答

0
在最新版本的SignalR客户端中(似乎仍然没有记录的方法可以做到这一点),您只需将onclose回调数组设置为空即可:connection._closedCallbacks = []

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接