在rxjs中嵌套skipWhile

时间:2017-02-27 12:13:49

标签: angular rxjs

我已经嵌套了api请求,我将它们拆分,就像我使用flatMap运算符使用Promises(.then)一样。所以这很好但我还要检查响应是否有效,如果不是,我会等待正确的响应,所以我添加了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行为呢?谢谢!

1 个答案:

答案 0 :(得分: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);
}