2017-09-27 6 views
0

Unten ist ein Ausschnitt, der beschreibt, was ich versuche zu tun. In meiner Anwendung habe ich ein Replay-Objekt, das überall verwendet wird. An einem bestimmten Punkt möchte ich den letzten vom Objekt ausgegebenen Wert erhalten, aber last scheint auf einem ReplaySubject nicht zu funktionieren.Wie bekomme ich den letzten Wert von einem ReplaySubject?

const subject = new Rx.ReplaySubject(); 

subject.next(1); 
subject.next(2); 
subject.next(3); 
subject.next(4); 

subject.subscribe(num => console.log(num)); 

var lastObserver = subject.last(); 
lastObserver.subscribe(num => console.log('last: ' + num)); 

FIDDLE

Der obige Code Feuer nichts für die lastObserver, aber funktioniert gut abonnieren.

Antwort

1

Vielleicht ist Ihre Verwirrung darüber, wie der .last()-Operator funktionieren soll?

.last() sollten warten, bis ein Stream abgeschlossen ist, und Ihnen den letzten Wert geben, der ausgegeben wurde, bevor der Stream beendet wurde. Damit es funktioniert, muss der Stream enden.

Ich glaube, dass Ihre lastObserver wird emittiert, sobald das Thema abgeschlossen ist.

const subject = new Rx.ReplaySubject(); 

subject.next(1); 
subject.next(2); 
subject.next(3); 
subject.next(4); 

subject.subscribe(num => console.log(num)); 
subject.complete(); // end your stream here 
var lastObserver = subject.last(); 
lastObserver.subscribe(num => console.log('last: ' + num)); 

Wenn Sie nicht möchten, dass Ihr Stream zu Ende, aber Sie wollen Abonnent den letzten Wert vor der Zeichnung emittiert werden, sollen für BehaviorSubject erreichen, die für diesen Anwendungsfall entwickelt wurde.

+0

Also wenn ich vervollständige keine anderen Abonnenten erhalten Updates? – Smeegs

+0

Das stimmt. Wenn Sie neue Abonnenten benötigen, um die letzte Emission zu erhalten, sobald sie sich angemeldet haben, ziehen Sie 'ReplaySubject' +' last' zurück und verwenden Sie stattdessen einfach ein 'BehaviorSubject'. – xtianjohns

+0

Ich bin überzeugt, dass ich das falsche Thema benutze, aber ich bin mir nicht sicher, dass das das richtige ist. Lassen Sie mich die Situation erklären. Dies ist ein Betreff, der das Ergebnis eines api-Anrufs ausgibt. Zum größten Teil wollen Abonnenten die nächste nicht die letzte ausstrahlen. Es gibt jedoch eine Situation, in der ich sehen möchte, was die letzte emittiert hat. – Smeegs

Verwandte Themen