2017-05-29 56 views
1

我有一个观察者,有一些用户。在规定的时间内,它会向后端发起新的调用并检索信息。我希望能够在指定的时刻触发一次性数据加载,获取该可观察数据中的数据,但不会更改间隔。插入间隔可观测的

对于这个可观察的,我有一些订户。

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() { 

} 

回答

1

可以实现这一功能合并您观察到的与可观察到的(主题),当你把一个值它的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(); 
} 

我测试了代码,它的工作原理非常完美。希望这可以帮助。