我有一个这样的观察:
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
是basciallymulticast.refCount
一旦用于组播主体建成后,不能重复使用(每Rxjs语法规则,看看有什么不同RxJS学科的语义?太),导致您观察到的行为。
在Rxjs 5中,它使用主题工厂(类似multicast(() => new Rx.Suject().refCount())
),因此在必要时可以重新创建主题。
简而言之,如果您无法处理当前行为,则可以切换到v5(请注意,该v5仍处于测试版中,并且有一些重大更改)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句