Angular,rxjs:使用flatMap进行嵌套订阅修复
我对angular和rxjs很陌生。。。我写了一些我想重构的代码,因为我读到我所做的恰好是一个反模式:对可观察对象的嵌套订阅 我搜索了互联网上的每一个地方来寻找解决方案(我希望我没有错过什么),我明白我必须做什么,但不能适用于我的情况:使用平面地图应该可以解决问题。以下是具体代码:Angular,rxjs:使用flatMap进行嵌套订阅修复,angular,rxjs,ngrx,Angular,Rxjs,Ngrx,我对angular和rxjs很陌生。。。我写了一些我想重构的代码,因为我读到我所做的恰好是一个反模式:对可观察对象的嵌套订阅 我搜索了互联网上的每一个地方来寻找解决方案(我希望我没有错过什么),我明白我必须做什么,但不能适用于我的情况:使用平面地图应该可以解决问题。以下是具体代码: ... observable1$: Observable<any>; observable2$: Observable<any>; ... constructor (...) { ...
...
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);
});
}
});
...
。。。
可观察1$:可观察;
可观察的2$:可观察的;
...
构造函数(…){
...
this.observe1$=this.someStore.pipe(select(Selector.selectMyObs1));
this.observe2$=this.someStore.pipe(select(Selector.selectMyObs2));
...
}
...
此.observed1$.subscribe(val1=>{
if(val1.error==false){
此.observe2$.subscribe(val2=>{
this.someArray.push(val2);
});
}
});
...
代码在某种程度上起作用,但我不确定我是幸运还是什么。
我想知道如何使用flatMap重写这段代码,因为只有在第一个没有检索到任何错误的情况下,我才能让第二个订阅
this.observable1$
.pipe(
mergeMap(val1 => {
if(val1.error === false) {
return this.observable2$
.pipe(
tap(val2 => {
this.someArray.push(val2);
})
);
}
return of(null);
})
).subscribe();
它将避免多次订阅。在这里,我们正在撰写observable。可能的副本我也看到了这篇文章,但它对我没有帮助:(