我为朋友们创建了一个小应用程序供我使用。我已经使用Rails和ActionCable实现了Websockets。
我正在实施一个传奇,检查websocket的连通性并通知用户是否已连接。有时连接的连接速度可能很慢,所以我想让它以1秒的间隔检查3/4次。
当前代码如下:
import actionCable from './actionCable';
export function* testSocketsConnectivity() {
// actionCable.connected() will be set to true when the connection is made
if (actionCable.connected()) {
yield put(socketsTestPassed());
} else {
yield put(socketsTestFailed());
}
}
除了少数情况下,此方法工作正常。用户连接时,套接字可能需要花费几秒钟建立连接,到连接时,检查已经失败。我已经将此功能更新为:
function pause(ms) {
return new Promise(resolve => setTimeout(resolve, ms))
}
export function* testSocketsConnectivity() {
const attempts = 3;
for (var i = 0; i < attempts; i++) {
if (actionCable.connected()) {
yield put(socketsTestPassed());
}
await pause(1000);
}
yield put(socketsTestFailed());
}
这确实等待了3次,这允许慢速连接建立套接字连接,否则3次检查后由于没有连接而失败。
但是,我是Redux和Redux Saga的新手,只使用了一周左右,并且想知道在使用Redux Saga而不是通过JavaScript?