2017-12-31 96 views
0

I RxJS BehaviorSubject als Singleton-Instanz in meinem Code verwendet, und dies hat meine Beobachtung bisher:Rxjs BehaviorSubject <Boolean> sendet letzten Wert statt default „false“

  1. Auf dem ersten Abonnement sendet er eine Standard "Falscher" Wert für den Abonnenten, was meiner Meinung nach in Ordnung und erwartet ist.
  2. Als nächstes, wenn ich nächste (wahre) Methode darauf anrufe, sendet es den richtigen Wert (wahr). Dies wird auch erwartet.
  3. Jetzt, wenn eine neue Subskription nach Schritt 2 gemacht wird, sendet es "wahr" anstelle von Standard "falsch".

Dies ist, wo ich stecke (bei Schritt 3). Ich weiß, dass BehaviorSubject den letzten Wert sendet, wenn eine neue Subskription gemacht wird, aber meine Logik verlangt, dass ich "falsch" erhalte, wenn die Subskription zum ersten Mal gemacht wird, nicht der letzte Wert, der mit next() gesendet wurde. Wie kann ich das erreichen?

Antwort

1

Wie Sie angegeben haben, erhält BehaviorSubject einen Anfangswert (und keinen Standardwert). Für Standardwert können Sie die startWith Operator:

const someSubject = new Rx.Subject(); 
 
const withSomeDefault = someSubject.startWith('some-default'); 
 

 
withSomeDefault.subscribe(console.log); 
 
someSubject.next('some-other-value'); 
 
withSomeDefault.subscribe(console.log);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.6/Rx.js"></script>

Verwandte Themen