Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular,rxjs:使用flatMap进行嵌套订阅修复_Angular_Rxjs_Ngrx - Fatal编程技术网

Angular,rxjs:使用flatMap进行嵌套订阅修复

Angular,rxjs:使用flatMap进行嵌套订阅修复,angular,rxjs,ngrx,Angular,Rxjs,Ngrx,我对angular和rxjs很陌生。。。我写了一些我想重构的代码,因为我读到我所做的恰好是一个反模式:对可观察对象的嵌套订阅 我搜索了互联网上的每一个地方来寻找解决方案(我希望我没有错过什么),我明白我必须做什么,但不能适用于我的情况:使用平面地图应该可以解决问题。以下是具体代码: ... observable1$: Observable<any>; observable2$: Observable<any>; ... constructor (...) { ...

我对angular和rxjs很陌生。。。我写了一些我想重构的代码,因为我读到我所做的恰好是一个反模式:对可观察对象的嵌套订阅

我搜索了互联网上的每一个地方来寻找解决方案(我希望我没有错过什么),我明白我必须做什么,但不能适用于我的情况:使用平面地图应该可以解决问题。以下是具体代码:

...
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。

可能的副本我也看到了这篇文章,但它对我没有帮助:(