我已经嵌套了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行为呢?谢谢!
答案 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);
}