2017-02-27 73 views
0

我嵌套了api請求,並將它們拆分,就像我用Promise(.then)對flatMap運算符做的那樣。所以這很好,但我還要檢查響應是否有效,如果不是,我會等待正確的響應,所以我添加了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); 
} 

的問題是,在功能上loadDataA的第一skipWhile工作像它應該,它不進入flatMap如果響應是不確定的。 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