我对angular和rxjs还是很陌生...我编写了一些要重构的代码,因为我一直在阅读我所做的事情恰好是一种反模式:可观察变量的嵌套订阅。 / p>
我搜索了互联网上的每个地方以找到解决方案(希望我不会错过任何事情),并且理解了我必须做的事情,但不能应用于我的情况:使用flatMap应该可以解决。这是特定的代码:
...
observable1$: Observable<any>;
observable2$: Observable<any>;
...
constructor (...) {
...
this.observable1$ = this.someStore.pipe(select(Selector.selectMyObs1));
this.observable2$ = this.someStore.pipe(select(Selector.selectMyObs2));
...
}
...
this.observable1$.subscribe(val1 => {
if (val1.error === false) {
this.observable2$.subscribe(val2 => {
this.someArray.push(val2);
});
}
});
...
代码以某种方式工作,但是我不确定我是否很幸运。 我想知道如何使用flatMap重写此代码,因为只有在第一个未检索到任何错误的情况下,我才必须进行第二个订阅。
答案 0 :(得分:1)
这样-
this.observable1$
.pipe(
mergeMap(val1 => {
if(val1.error === false) {
return this.observable2$
.pipe(
tap(val2 => {
this.someArray.push(val2);
})
);
}
return of(null);
})
).subscribe();
它将避免多个订阅。在这里,我们构成可观察的物体。