javascript - SignalR:在调用方法之前等待重新建立连接

标签 javascript asp.net signalr

我有一个 HubProxy,其中包含许多客户端触发的方法,如下所述:

proxy.invoke('hub_Subscribe');
proxy.invoke('triggerOnServer');
proxy.invoke('dataToServer',someModel);

现在,如果 signalr 连接到服务器并且我尝试调用上述任何方法,它会给我 Connection must be started before data can be sent.在收到调用结果之前连接已断开。 错误。

我知道可以利用 connection.stateChanged 确认 signalR 是否已连接并相应地调用方法。但是需要记录这些事件,以便在信号器连接建立后可以调用它们。

那么,在连接断开的情况下,是否有一种简单的方法来记录这些方法?稍后一旦 signalR 连接启动并运行,调用那些方法?

类似proxy.invoke('dataToServer',someModel).WaitForSignalRToBeConnected();

注意:在客户端断开连接后,我使用 THIS 继续连接到服务器

最佳答案

我目前已经通过以下 promise 解决了这个问题:

function GetOpenConnection() {
    return new Promise((resolve, reject) => {
        const msMax = 1000;
        const msInc = 10;

        var ms = 0;

        var idInterval = setInterval(() => {
            if (connection.connectionState == 1) {
                clearInterval(idInterval);
                resolve(connection);
            }
            
            ms += msInc;

            if (ms >= msMax) {
                clearInterval(idInterval);
                reject(connection);
            }
        }, msInc);
    });
}

用法:

console.log('before GetOpenConnection()');
GetOpenConnection().then((connection) => {
    console.log('Connected: ', connection.connectionState);
    // invoke functions here
}).catch((connection) => {
    console.log('Not connected: ', connection.connectionState);
});
console.log('after GetOpenConnection()');

关于javascript - SignalR:在调用方法之前等待重新建立连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35031570/

相关文章:

javascript - 在 DOM 集合上使用 `querySelectorAll` 的子选择器

javascript - 将表格的2行设置为最后一行

c# - 验证数据库中是否存在? (MySql 和 ASP.NET)

c# - 使用 asp.net 中的更新面板单击按钮更新 gridview

c# - 在负载平衡环境中丢弃服务器

c# - 将 Signal R 整合到现有的 Web 应用程序中

signalr - 如何在 ASP.NET Core 2.0 的 SignalR 中检查 HubConnection.StartAsync 是否成功?

javascript - 为什么 JavaScript 在解析数字的末尾添加一个额外的非零数字

带有 html 标签的 Javascript 子字符串

asp.net - 如何更新 asp.net 网站(只是更改了文件)