I've started playing with RxJS5, and now see that there is no longer a shareReplay
method.
It's quite possible that I often misused shareReplay
in RxJS4, but now I'm struggling to get the behaviour that I want, i.e:
How do I implement this with RxJS5?
In general I think I understand the RxJS operators quite well, but the whole cold, hot, publish, connect is rather unclear to me. Is there a good reference that shows how to find what kind of observable I have, so that I can find out in a logical manner why a subscribe is not getting values, or why an observable is being executed multiples times?
EDIT
Happy news, shareReplay() is back in RxJS 5.4.0:
Changelog: https://github.com/ReactiveX/rxjs/blob/892700dd4f5d5e5f9ae9276ede32208f4390c5e9/CHANGELOG.md#540-2017-05-09
Barebones documentation: http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-shareReplay
That question is best answered by members who participate in Rxjs5, but here is my take:
shareReplay
is the multicast
operator with a ReplaySubject
, followed by a refCount
. So I would bet that publishReplay(x).refCount()
should be quite close to the shareReplay
behaviour. In any case, publishReplay
already gives you all the points you mentioned. The refCount
adds the unsubscription when there is no more observers (refCount
decreased to 0). var replayed = source.publishReplay(1).refCount();
, that should be equivalent to your shareReplay(1)
.About the rest of your question:
good reference that shows how to find what kind of observable I have...
. There are many places, including Rxjs4 documentation where you find explanations about hot and cold observables.Follows my own present understanding of the matter:
multicast
operator and its derivatives share
, publish
, shareReplay
etc. Those operators internally all involve subjects.Rx.Observable.fromEvent('input','click')
is hot. You can see in its implementation that there is a share
somewhere.connectable
kind which till it is connected, is neither hot nor cold.defer
always give rise to a cold observable.groupBy
. op1.op2.groupBy
is cold, but it will emit hot observables as values in the resulting stream. In those cases, only the documentation (if any) can help you find out. Otherwise, the source code, and the test specs. Or asking on SO.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With