我有一个像这样的可观察对象:
const records$ =
Rx.DOM.fromWebSocket('ws://192.168.2.4:9001/feed/', null)
.map(ev => parseRecord(ev.data))
.share();
我有很多订阅者。当连接丢失时,所有订阅者取消订阅:
let records$Subscription;
records$Subscription = records$.subscribe(
record => { ... },
error => records$Subscription.dispose()
);
我验证了对 dispose
的调用确实是针对每个订阅进行一次。因此,share
引用计数已达到零。
但是,当我现在再次订阅 records$
时,没有建立新的 WebSocket 连接。然而,当我删除对 share
的调用时,它是。为什么 share
无法按预期工作?
最佳答案
我相信在 rxjs v5 中,share
确实允许您重新连接,但在 Rxjs v4 中则不允许。
在 Rxjs 4 中,share
基本上是 multicast.refCount
并且一旦用于多播的主题完成,它就不能被重用(根据 Rxjs 语法规则,有一个也看看What are the semantics of different RxJS subjects?),导致您观察到的行为。
在 Rxjs 5 中,它使用主题工厂(类似于 multicast(() => new Rx.Suject().refCount())
),因此在必要时会重新创建主题。
简而言之,如果您无法满足当前的行为,您可以切换到 v5(请注意,它仍处于测试阶段,并且存在一些重大更改)。
关于javascript - 使用共享的 RxJS observable 重新连接 WebSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36675104/