2017-05-29 9 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秒後にリロードをトリガーし、その間隔からの別のプーリングを行う必要があるということです。基本的には、観測データストリームにデータを挿入するだけです。どうやってやるの?

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

私はコードをテストし、それは完全に動作します。お役に立てれば。

関連する問題