22

私はホットオブザーバブル(この場合は主題)を持っています:

var subject = new Rx.Subject();

新しいサブスクリプションが作成されるたびに、最後に生成された値がすぐに発生するという別のオブザーバブルを作成したいと思います。

したがって、擬似コードでは:

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
});

これは大まかに私が望んでいることであり、うまくいくようです。ただし、同じことを実現するには、いくつかの組み込みメカニズムが必要だと思います

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;
    });
};
4

3 に答える 3

6

行動件名:

Rx.BehaviorSubject最後の値をキャッシュし、指定された値で始まるサブジェクトを作成するクラスの新しいインスタンスを初期化します。

var subject = new Rx.BehaviorSubject('a' /* initial value */);

subject.subscribe(function (x) {
    console.log('x1:' + x);
});

subject.onNext('d');

// Will produce the last value.

subject.subscribe(function (x) {
    console.log('x2:' + x);
});
<script src='https://rawgit.com/Reactive-Extensions/RxJS/v.2.5.3/dist/rx.all.js'></script>

于 2012-03-16T14:42:24.690 に答える