Nach der RxJS 5 Handbuch des verbindet auf MulticastingLogik auszuführen, wenn RxJS 5 RefCount() Abschnitt oder abmeldet von der Quelle
... können wir ConnectableObservable dem RefCount() Methode (Referenzzählung), die zurückkehrt verwenden ein Observable, der verfolgt, wie viele Abonnenten es hat. Wenn die Anzahl der Abonnenten von 0 auf 1 steigt, wird connect() für uns aufgerufen, was die gemeinsame Ausführung startet. Nur wenn die Anzahl der Teilnehmer von 1 auf 0 abnimmt, wird sie vollständig abbestellt, wodurch die weitere Ausführung gestoppt wird.
Ich mag würde zu verstehen, ob es möglich ist, in jedem dieser Ereignisse einzuhaken und einige Logik ausführen, idealerweise, bevor die Quelle des beobachtbaren connect()
oder unsubscribe()
auftritt, sondern auch nach der Tat akzeptabel wäre.
Wenn es keine Möglichkeit gibt, dies mit dem Operator refCount()
zu tun, wäre es sehr hilfreich, wenn Sie ein Beispiel geben könnten, wie Sie dies mit einem benutzerdefinierten Operator erreichen können.
Ich dachte, vielleicht könnte ich irgendwie die kompletteFn von do(nextFn,errFn,completeFn)
verwenden, um in diese Haken, aber scheint nicht zu funktionieren, wie durch das folgende Snippet gezeigt.
var source = Rx.Observable.interval(500)
.do(
(x) => console.log('SOURCE emitted ' + x),
(err) => console.log('SOURCE erred ' + err),
() => console.log('SOURCE completed ')
);
var subject = new Rx.Subject();
var refCounted = source.multicast(subject).refCount();
var subscription1, subscription2, subscriptionConnect;
// This calls `connect()`, because
// it is the first subscriber to `refCounted`
console.log('observerA subscribed');
subscription1 = refCounted.subscribe({
next: (v) => console.log('observerA: ' + v)
});
setTimeout(() => {
console.log('observerB subscribed');
subscription2 = refCounted.subscribe({
next: (v) => console.log('observerB: ' + v)
});
}, 600);
setTimeout(() => {
console.log('observerA unsubscribed');
subscription1.unsubscribe();
}, 1200);
// This is when the shared Observable execution will stop, because
// `refCounted` would have no more subscribers after this
setTimeout(() => {
console.log('observerB unsubscribed');
subscription2.unsubscribe();
}, 2000);
<script src="https://unpkg.com/@reactivex/[email protected]/dist/global/Rx.js"></script>
Was Ausgang Sie tun erwarten Sie von dem Beispiel, das Sie gemacht haben? Ich würde denken, dass du genau das suchst. – martin