2017-10-20 7 views
0

呼び出す防ぎます。角度RxJSは、二重のAPIは、私は再びそれを実行せずにRxJSストリームの結果を再利用したい

コンポーネントには、入力ストリーム(query$category$)が必要です。私は同じAPIソースを共有する2つのストリームに変換したい。今は2つのリクエストをしています。私は1つの要求しか持たない。

簡体コード:

this.searchResults$ = this.query$ 
    .switchMap((query) => this.httpClient.get(`/whatever?q=${query}`)); 

this.filteredSearchResults$ = Observable 
    .combineLatest(this.searchResults$, this.category$) 
    .filter(([ searchResults, category ]) => { 
    // Code to make a subset 

    return ['a', 'subset']; 
    }); 

私は同じコンポーネントににsearchResults $とfilteredSearchResults $の両方を消費:2つのAPIコールがある理由

<ng-container *ngIf="(searchResults$ | async) as searchResults"> 
    <ng-container *ngIf="(filteredSearchResults$ | async) as filteredSearchResults"> 
    </ng-container> 
</ng-container> 

今、私は理解しています。私はちょうどそれを防ぐための方法が表示されません。

答えて

0

あなたはshareを使用する場合があります:それは今、部分的に働いている

this.searchResults$ = this.query$ 
    .switchMap((query) => this.httpClient.get(`/whatever?q=${query}`)) 
    .share(); <-- HERE 

this.filteredSearchResults$ = Observable 
    .combineLatest(this.searchResults$, this.category$) 
    .filter(([ searchResults, category ]) => { 
    // Code to make a subset 

    return ['a', 'subset']; 
    }); 
+0

。 pageloadでは、両方のストリームが期待どおりに動作します。しかし、クエリ$またはカテゴリ$のいずれかが変更されるとすぐに、古い値で余分なリクエストが発生します。新しい値を持つ通常のリクエストだけでなく、 –

関連する問題