2017-12-11 19 views
-1

私は最近、メモリではなくディスクからデータを動的に取得する関数を変換し、プロセス中にObservableを返すように変数を同期的に返すことになりました。Angular/Rxjs条件付きネストObservables

この変換の一部として、すべての従属関数をオブザーバブル経由で非同期に変換しなければならず、これらの関数の1つでは、カテゴリの最後のシナリオを取得するネストされた条件付き呼び出しを実行します。デフォルトのシナリオ:シナリオは=== nullの分岐が実行されgenerateScenarioは()>観測可能に返すことを意味している観察可能な返しthis.defaultService.getDefault(category, value)ここ

public generateScenario(category: string, value: number = 1) : Observable<Scenario> 
{ 
    return this.getHistory(category).map(scenario => { 
     if(scenario === null) 
     { 
      return this.defaultService.getDefault(category, value); 
     } 
     else 
     { 
      return scenario; 
     } 
    }); 
} 

これをフラット化して、ネストされたObservableを返さないようにするにはどうすればよいですか?

+0

'.do'は、何かを返してストリームの値を変更したくない場合です。 – jonrsharpe

+0

@jonsharpe申し訳ありませんが、サンプルコードでミスを犯しました、私は実際にマップ – cubiclewar

答えて

0

switchmergeのようなRxJSのさまざまな平坦化演算子でこれを平坦化することができます。この場合、switchは、最も適切と思われる:

this.getHistory(category).switchMap(scenario => 
    scenario === null ? this.defaultService.getCategory(category, value) 
    : of(scenario) 
); 

of.switchMapに渡された関数が開封されたの/ etc /平坦化することが観察可能に返さなければならない必要とされます。