Publier la dernière valeur d'une observable
J'ai un chaud observables (un sujet, dans ce cas):
var subject = new Rx.Subject();
Je veux créer un autre observable que chaque fois qu'un nouvel abonnement est effectué immédiatement les feux de la dernière valeur qui a été produit.
Donc en pseudo code:
var myObservableWithLastValue = subject.publishLast();
subject.onNext(3);
myObservableWithLastValue.subscribe(function(x){
console.log(x); //should write 3
});
myObservableWithLastValue.subscribe(function(x){
console.log(x); //should write 3, too
});
subject.onNext(4);
myObservableWithLastValue.subscribe(function(x){
console.log(x); //should write 4
});
C'est à peu près ce que je veux et il semble fonctionner. Cependant, je suppose qu'il doit être intégré dans le mécanisme pour obtenir le même
Rx.Observable.prototype.keepLatest = function () {
var latestValue;
var disposable = this.subscribe(function (value) {
latestValue = value;
});
return Rx.Observable.create(function (observer) {
observer.onNext(latestValue);
return disposable.dispose;
});
};
Vous devez vous connecter pour publier un commentaire.
RxJs a maintenant la
ReplaySubject
. L'initialiser avec 1 tampon et que vous avez la BehaviorSubject.JS:
HTML:
BehaviorSubject
dans le @Asti réponse. C'est la raison je n'ai pas de créer une nouvelle asnwer, mais seulement contribué à la vôtre.document.write
à cette fin.console.log
permet d'inspecter et d'interagir avec la sortie. C'est une opinion basée sur la suggestion, cependant.BehaviorSubject:
JS:
HTML:
J'ai utilisé
.cache(1)
sur une chaudeObservable
. Semble donner le comportement que vous avez demandé (mais je suis un novice).cache
a été supprimé à partir de la prochaine version.