2017-02-27 13 views
0

私はネストされたAPI要求を持っていて、私はflatMap演算子を使ってPromises(.then)と同じように分割しました。だからこれは素晴らしいですが、私はまた、応答が有効であるかどうかを確認する必要があります私は正しいものを待つだろうので、私はskipWhile演算子を追加しました。rxjs内のネストされたskipWhile

init(): Observable<any> { 
    return this.loadDataA(); 
}  

loadDataA(): Observable<any> { 

    return this._serviceA.loadData() 
     .skipWhile((foo) => foo === undefined) 
     .flatMap((foo) => this.loadDataB(foo.importantProp)); 
} 

loadDataB(important: string): Observable <any> { 

    return this._serviceB.loadData(important) 
     .skipWhile((bar) => bar === undefined) 
     .map((bar) => true); 
} 

問題は、応答が定義されていない場合、それは、それはflatMapにならないはずですように機能loadDataAの最初のskipWhileが機能することです。 loadDataBのskipWhile演算子は.mapには入りませんが、loadDataAのflatmapに戻り、loadDataB関数で.mapを実行しないようにします。どうやってネストされたskipWhileビヘイビアを実行できますか?ありがとう!

答えて

0

私はあなたの_serviceA.loadData()がどのように見えるかわからないが、私はあなたが使用しての、おそらく優れているという強い疑いを持っているfilter-operator

loadDataA(): Observable<any> { 
    return this._serviceA.loadData() 
     .filter(foo => foo != null) // will not emit any data if it is null or undefined 
     .flatMap(foo => this.loadDataB(foo.importantProp)); 
} 

loadDataB(important: string): Observable <any> { 
    return this._serviceB.loadData(important) 
     .filter(bar => bar != null) 
     .mapTo(true); 
} 
+0

フィルタ演算子に問題がある、それはフィルタリングだろう、ということ未定義の応答ですが、私はストリーム内の有効なものを受け取りません。 skipWhileでは、有効なものが受信されるまで応答をスキップします。 – derEntwickler

+0

私は、あなたが言ったことを理解しているとは思えません。あなたの事例のストリームダイアグラムを描くことはできますが、フィルタはどのデータを受け取るかに影響を与えません。それは単に特定のデータを省略します。 – olsn

関連する問題