2017-01-25 6 views
1

複数のhttpリクエストを1つの観測可能なものにフォークし、間隔で呼び出し、すべてのサブスクライバ間で同じデータを共有したい。

私のコードは、これまでのようになります。

import {Observable} from "rxjs/Rx"; 

let obs = Observable 
    .interval(10000) 
    .publish() 
    .connect() 
    .forkJoin(
     this.http.get(API_URL + "x", {headers: this.headers}) 
     .map(response => response.json()), 
     this.http.get(API_URL + "y", {headers: this.headers}) 
     .map(response => response.json()) 
    ) 
    .map(res => { 
    // do some stuff 
    return res; 
    }); 

エラー:私が読んだ

Typescript Error 
Property 'forkJoin' does not exist on type 'Subscription'. 

https://blog.thoughtram.io/angular/2016/06/16/cold-vs-hot-observables.html

Multiple $http requests in Ionic2

http://restlet.com/blog/2016/04/12/interacting-efficiently-with-a-restful-service-with-angular2-and-rxjs-part-2/

ありがとう!

+0

'publish()'と 'connect()'なしで試しましたか? – chrigu

+0

このエラーが発生しました。プロパティ 'obserJable 'に 'forkJoin'プロパティが存在しません。 – kaynow

+0

少なくともあなたはサブスクリプションの代わりにオブザーバブルを持っています。多分、あなたはhttp://stackoverflow.com/questions/38443798/property-forkjoin-does-not-exist-on-type-typeof-observable-angular2 – chrigu

答えて

2

このような何か作業をする必要があります:次に

let source = Observable 
    .interval(1000) 
    .flatMap(() => { 
     return Rx.Observable.forkJoin(
      this.http.get(API_URL + "x", {headers: this.headers}) 
       .map(response => response.json()), 
      this.http.get(API_URL + "y", {headers: this.headers}) 
       .map(response => response.json()) 
     ) 
    }) 
    .publish(); 

source.connect(); 

オブザーバーは、この観測可能

source.subscribe(...); 

私はここでやっていることは間隔、観察を取るとのforkJoinのための各値を交換することであるにサブスクライブすべての操作。次に、同じデータを多数のサブスクリプションに共有するために公開します。

お客様の実装でもう1つ問題があったのは、サブスクリプションを.connect()から返品していたことです。これは、必要なときにいつでも廃棄することを意味しています。オブザーバーは、公開されたソースに登録する必要があります。

+0

ありがとうございました!それは働いている!私の場合は、 "Rx.Observable.forkJoin"を "Observable.forkJoin"に置き換えなければなりませんでした。素晴らしい説明をありがとう;) – kaynow

関連する問題