Die documentation on BehaviorSubject heißt es, dass es den letzten emittierten Wert zurückgeben sollte unabhängig davon, wann ich subscribe aber es zurückgibt es nicht für mich:Warum `BehaviorSubject` emittieren nicht dem letzten Wert
const ofObservable = Rx.Observable.of(1, 2, 3);
const subject = new Rx.BehaviorSubject();
ofObservable.subscribe(subject);
subject.subscribe((v) => {
console.log(v);
}, null,() => {
console.log('completed');
});
Die Code-Protokolle completed
nur.
Die ReplaySubject
funktioniert wie erwartet mit dem obigen Code und log 1, 2, 3, completed
.
Dank, warum tut 'ReplaySubject' Arbeit dann? Wird es nicht von "vollständig" von der Quelle beobachtet beobachtet? –
und mit dem Ansatz, den Sie beschrieben, wird das Thema nie abgeschlossen, oder? –
Offenbar nicht, das 'ReplaySubject' ist tatsächlich nicht abonniert, aber es gibt trotzdem alle gespeicherten Werte wieder. Sie können es hier https://github.com/ReactiveX/rxjs/blob/master/src/ReplaySubject.ts#L41 sehen. Ich denke, dass es Sinn macht, weil "ReplaySubject" wirklich die gesamte Sequenz von Items wiedergeben sollte, während "BehaviorSubject" sich wie die Basis "Subject" Klasse verhalten soll, aber nur garantiert, dass immer mindestens ein Item ausgegeben wird. – martin