在RxJS中,我希望为每个新订阅者提供最后发出的项目。但是我如何在Observable链中做到这一点?
this.http.get().map().replaySubject().refCount()
答案 0 :(得分:5)
这个答案涉及 RxJS 5 :
一种方法是使用publishReplay
:
this.http
.get()
.map()
.publishReplay(1)
.refCount();
如果你的来源是一个来源,那就完成了(这是休息电话的典型情况,因为它在收到回复后完成),你也可以使用publishLast
:
this.http
.get()
.map()
.publishLast()
.refCount();
第三种方式(为您提供最大的灵活性)是使用外部BehaviorSubject
或ReplaySubject
:
public myData$: BehaviorSubject<any> = new BehaviorSubject(null); // initial value is "null"
public requestData(): BehaviorSubject<any> {
this.http
.get()
.map()
.do(data => this.myData$.next(data))
.subscribe();
return this.myData$.skip(1); // the returned subject skips 1, because this would be the current value - of course the skip is optional and depends on the implementation of the requesting component
}
在您的组件中,您可以通过myData$.subscribe(...)
获取数据以获取当前“缓存”的数据,或通过requestData().subscribe(...)
获取最新数据。