angular - 如果连接未处于“已连接”状态,则无法发送数据
问题描述
在 Angular 6 中使用 SignalR 进行一个非常简单的调用来设置连接/停止,其中我有以下代码:
信号R.helper.ts
public static setupHub<T>(hubUrl: string, eventName: string, callback: (data: T) => void, ...params: SignalRParam[]): HubConnection {
const token = localStorage.getItem(appConstant.token);
const url = this.buidlUrl(hubUrl, ...params);
const connection = new HubConnectionBuilder()
.withUrl(url,
{ transport: HttpTransportType.WebSockets, accessTokenFactory: () => token })
.build();
environment.production && connection.start();
!environment.production && connection.start().catch(err => console.error(err.toString()));
connection.on(eventName, callback);
return connection;
}
如果我尝试登录我的页面,我会在控制台上不断收到此错误:
signalR.helper.ts:19 错误:如果连接未处于“已连接”状态,则无法发送数据。
我是 SignalR 和 Angular 的新手,为什么我不断收到此错误?
解决方案
在调用任何方法之前,确保从“.start()”返回的承诺已经解决。您可能想要更改您的方法以返回承诺,以便您可以将其他方法链接起来。或者切换到在方法中使用 async/await 模式。
另外,请确保您没有意外调用“.stop()”。在我的例子中,我有一个观察用户是否通过身份验证并在他们注销时调用“.stop()”。问题是 observable 表明在页面加载时用户在短时间内没有经过身份验证 - 这导致了一种竞争条件,有时它可以工作,有时它不会。
推荐阅读
- list - OCaml 中的递归:使用 Concat 进行反向
- flutter - Flutter - 翻转动画 - 根据点击的位置将卡片翻转到其右侧或左侧
- python - 刮无硒,蟒蛇
- python - 打开并显示从本地文件夹中选择的图像
- kubernetes - 用 Deployment 替换 ReplicationController 是否安全
- c# - c#中受保护和私有保护有什么区别?
- algorithm - 具有两个独立外循环和一个相关内循环的三重嵌套 For 循环
- node.js - 如何使用 MongoDB/Mongoose 和 node.js 中的另一个字段值更新字段
- javascript - 总是收到“无法读取 null 的属性'样式'”错误,我不明白为什么
- reactjs - 如何测试scss模块