2017-02-01 4 views
0

私はAngular 2を使用しており、複数のオブザーバで共有できるようにHTTPリクエストを観測可能にするのに苦労しています。具体的には、エラーを含むすべての応答タイプを共有したいと思います。Rxjs - コールドオブザーバブルをホットなものに変換できません

私はそのような試みた:

return this._http.request(new Request(options)) 
    .map((res: Response) => this.refreshToken(res)) 
    .share() 

、次いで

this.data.request() 
    .map((response: Response) => (new financeiro.FetchCompletedAction(response))) 
    .catch((error: any) => { 
    console.log('lancamento-effects:'); 
    return Observable.of(new feedback.HttpRequestFailedAction(["Erro ao inserir lançamento"])) 
    }) 

上記のコードは、最終的にユーザの画面上にエラーメッセージを示すエラー・アクションを送信するsuposedれます。

enter image description here

実はこれが二回起こっている

は..また、それは、コンソール上で重複して印刷されます。

enter image description here

+0

コードがどのように整理されているかははっきりしていません。あなたの最初のコードブロックは 'this.data.request()'メソッドの本文を示していますか? – AngularChef

答えて

1

ここではいくつかのコード(Plunkr)は次のとおり

***SIDE EFFECT*** 
subs1 ***RESULT*** 
subs2 ***RESULT*** 

一副作用(すなわち、HTTP要求)、2つのサブスクリプションを:

@Component({ 
    selector: 'my-app', 
    template: ` 
    <button (click)="subscribe()">Subscribe</button> 
    ` 
}) 
export class AppComponent { 
    obs: Observable<any>; 

    constructor(private http: Http) { 
    // Create the observable ONCE + Share. 
    this.obs = this.http.get('https://httpbin.org/get') 
     .do(() => console.log('***SIDE EFFECT***')) 
     .mapTo('***RESULT***') 
     .share(); 
    } 

    subscribe() { 
    // Subscribe to the same observable TWICE. 
    this.obs.subscribe(val => console.log('subs1', val)); 
    this.obs.subscribe(val => console.log('subs2', val)); 
    } 
} 

ここコンソールに示すものです。

これはあなたが探しているものですか?

0

すべての購読者がに同意していることを確認してください。熱く観測可能です。電話をするたびに:

return this._http.request(new Request(options)) 
    .map((res: Response) => this.refreshToken(res)) 
    .share() 

寒い観察可能なものから新しい熱い観測値を作成しています。上記のコードを想定し

例)(fooという名前の関数でラップさ:以下のみ作成されます。一方で

foo().subscribe(...) 
foo().subscribe(...) 

:あなたは次の操作を行う場合は、2つのホット観測及び2つのHTTPリクエストを作成します。シングルホット観測可能(シングルHTTPリクエスト):

let hotObs = foo(); 
hotObs.subscribe(...) 
hotObs.subscribe(...); 
関連する問題