我有一个 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/