RxJS: Wie man nicht abonnieren, um Anfangswert und/oder undefiniert?
Wird neu in RxJS ich oft erstellen Sie ein Thema, das hält Werte in der Zukunft, sondern ist zunächst undefined
. Es kann nur sein undefined
ersten mal. Derzeit nutze ich ein filter
zu überspringen undefined
Werte, aber das ist sehr umständlich, wie ich es überall, da muss ich nur einmal. (Vielleicht Mach ich was falsch hier?) Kann ich das irgendwie abonnieren mySubject
nur, nachdem er bekam seinen ersten Wert über onNext
?
var mySubject = new Rx.BehaviorSubject(undefined);
mySubject.filter(function(value) {
return value !== undefined;
}).subscribe(function(value) {
//do something with the value
});
- Es gibt auch eine skip-Methode, die Sie aufrufen können, auf das beobachtbare zu überspringen Reihe von führenden Positionen in der Sequenz.
- kann u pls klärt mich auf, wie skip verwenden, mit Abonnement zu BehaviorSubject ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
new Rx.ReplaySubject(1)
stattBehaviorSubject
.ReplaySubject
verloren einige Aspekte derBehaviorSubject
es gehalten, wenn diese Frage zunächst beantwortet. Zum Beispiel, wenn Sie wirklich wünschen, eine synchrone Momentaufnahme Wert, Sie sind zurück, um mit.skip(1)
(stackoverflow.com/a/44884189/608220) oder das abonnieren Ihres eigenen cache. Beachten Sie auch die Funktionalität auf die Fertigstellung hat sich geändert.getValue()
. Abonnieren SieReplaySubject()
erfordertskip(1)
wenn Sie nicht möchten, dass ein veralteter Wert. Sorry, ich erinnere mich nicht, was ich meinteOnComplete()
. Ich fühle mich wie es gab ein oder zwei kleinere Dinge auch. Punkt ist, Sie sind ziemlich Verschieden von jeder anderen.Erwähnt Wird Sie sollten in der Lage sein, überspringen Sie einfach den ersten Wert durch die Verwendung der skip-operator:
subscribe
Anruf nach dem ersten real-Wert wird ausgegeben.mySubject.pipe( skipWhile( v => !v ) );
skipWhile
es wird eine Beobachtbare, so dass es nicht zu zeigen, einen echten Anwendungsfall, in dem Sie benötigen eine BehaviorSubject.Für jetzt bin ich mit der
- filter
- operator, aber ich weiß nicht, ob es eine gute Lösung:filter
es wird eine Beobachtbare, so dass es nicht zu zeigen, einen echten Anwendungsfall, in dem Sie benötigen eine BehaviorSubject.Manchmal gibt es eine Notwendigkeit für behaviourSubject, wo der anfängliche Wert spielt keine Rolle, und der aktuelle Wert wird benötigt, asynchron, während arbeiten in einem stream,
Nur in unserem Fall mehrere Kette verspricht gehandhabt werden, mit der Benutzer Abbrechen während der Verarbeitung oder beim abrufen der Daten aus einer beliebigen Position im stream.
Dies kann erreicht werden, mithilfe der folgenden Weise.