Rxjs 发布可观测数据的最后一个值

Rxjs 发布可观测数据的最后一个值,rxjs,reactive-extensions-js,Rxjs,Reactive Extensions Js,我有一个可观察到的热点(本例中的主题): var subject=new Rx.subject(); 我想创建另一个可观察对象,即每次创建新订阅时,都会立即激发生成的最后一个值 所以在伪代码中: var myObservableWithLastValue=subject.publishLast(); 主题.onNext(3); myObservableWithLastValue.subscribe(函数(x){ console.log(x);//应该写入3 }); myObservableWi

我有一个可观察到的热点(本例中的主题):

var subject=new Rx.subject();
我想创建另一个可观察对象,即每次创建新订阅时,都会立即激发生成的最后一个值

所以在伪代码中:

var myObservableWithLastValue=subject.publishLast();
主题.onNext(3);
myObservableWithLastValue.subscribe(函数(x){
console.log(x);//应该写入3
});
myObservableWithLastValue.subscribe(函数(x){
console.log(x);//也应该写入3
});
主题.onNext(4);
myObservableWithLastValue.subscribe(函数(x){
console.log(x);//应该写入4
});
这大概就是我想要的,而且似乎有效。然而,我想一定有某种内在的机制来实现同样的目标

Rx.Observable.prototype.keepLatest=函数(){
var最新值;
var disposable=this.subscribe(函数(值){
最新价值=价值;
});
返回Rx.Observable.create(函数(观察者){
observer.onNext(最新值);
退货、处理;
});
};

初始化
Rx.BehaviorSubject
类的新实例,该类创建一个主题,该主题缓存其最后一个值并以指定的值开始

var subject=new Rx.BehaviorSubject('a'/*初始值*/);
主题.订阅(功能(x){
console.log('x1:'+x);
});
subject.onNext('d');
//将产生最后一个值。
主题.订阅(功能(x){
console.log('x2:'+x);
});
RxJs现在拥有了。用1个缓冲区初始化它,就有了BehaviorSubject

//例如,使用缓冲区大小2
var subject=新接收的ReplaySubject(2/*缓冲区大小*/);
subject.onNext('a');
subject.onNext('b');
subject.onNext('c');
subject.subscribe(函数(x){document.write('x1:'+x+'
');}); subject.onNext('d'); subject.subscribe(函数(x){document.write('x2:'+x+'
');})
我在热
可观察的
上使用了
.cache(1)
。似乎给出了你要求的行为(但我是新手)

可以观察到,每次创建新订阅时,都会立即激发生成的最后一个值


好的,但是没有内置的操作符可以接受现有的流并应用草图行为吗?@Christoph你有没有试过把你的普通主题换成行为主题?我不是直接和主题打交道。这只是为了更好地说明这种行为。我想要一个适用于任何热无限流的操作符。主体实现IObserver和IObservable。您应该能够让行为主体订阅您的IObservable,然后再订阅BehaviorSubject@gajus-你能告诉我你的代码和原来的代码有什么主要区别吗?恐怕我遗漏了什么。此外,它将缓冲区大小设置为2,因此每次都会重播最后2个值。无。我只是让这个示例具有交互性和完整性。缓冲区大小用于说明与@Asti答案中使用
BehaviorSubject
的区别。这就是为什么我没有创建一个新的asnwer,只是为你的asnwer做了贡献。@GajusKuizinas Ok。我明白你的意思。改进了一点,在结果窗口而不是控制台中显示结果:)您确实不应该使用
文档。为此编写
console.log
允许检查输出并与输出交互。不过,这是基于意见的建议。@GajusKuizinas With console.log在结果窗口中看不到任何内容。你有更好的建议吗?console.log还可以,但不太具有交互性。我的理解是,
cache
来自即将发布的版本。