首页 > 解决方案 > 如果连接未处于“已连接”状态,则无法发送数据

问题描述

在 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 的新手,为什么我不断收到此错误?

标签: angulartypescriptsignalrangular6signalr-hub

解决方案


在调用任何方法之前,确保从“.start()”返回的承诺已经解决。您可能想要更改您的方法以返回承诺,以便您可以将其他方法链接起来。或者切换到在方法中使用 async/await 模式。

另外,请确保您没有意外调用“.stop()”。在我的例子中,我有一个观察用户是否通过身份验证并在他们注销时调用“.stop()”。问题是 observable 表明在页面加载时用户在短时间内没有经过身份验证 - 这导致了一种竞争条件,有时它可以工作,有时它不会。


推荐阅读