插入间隔可观测的
问题描述:
我有一个观察者,有一些用户。在规定的时间内,它会向后端发起新的调用并检索信息。我希望能够在指定的时刻触发一次性数据加载,获取该可观察数据中的数据,但不会更改间隔。插入间隔可观测的
对于这个可观察的,我有一些订户。
NotificationService.notifObservable = Observable.interval(1 * 60 * 1000)
.startWith(0)
// merge the observable streams
.mergeMap(res => this.http.get('ws/message/list'))
// extract the body from the response
.map(res => res.json())
// use only one result
// that is shared between subscribers
.publishReplay()
// converts the connectable observable to observable
.refCount();
在这里,我想获取来自同一个URL的数据,并在上面的观察到的数据合并,但我不想改变它的时间间隔。意思是让我们说可观测数据在这一刻拉动数据,我在10秒和50秒后触发重新加载,应该从间隔时间开始另一个汇集。基本上,我只是将数据插入到observables流中。我怎样才能做到这一点?
triggerNotifReload() {
}
答
可以实现这一功能合并您观察到的与可观察到的(主题),当你把一个值它的http请求为您的。代码将如下所示:
mySubject: Subject<any> = new Subject<any>();
constructor() {
let myTriggerValueObs = this.mySubject.flatMap(() => this.http.get('ws/message/list'))
let notifObservable = Observable.interval(1 * 60 * 1000)
.startWith(0)
// merge the observable streams
.mergeMap(res => this.http.get('ws/message/list'))
// merge wiht trigger obs
.merge(myTriggerValueObs)
// extract the body from the response
.map(res => res.json())
// use only one result
// that is shared between subscribers
.publishReplay()
// converts the connectable observable to observable
.refCount();
}
triggerNotifReload() {
this.mySubject.next();
}
我测试了代码,它的工作原理非常完美。希望这可以帮助。