RXJS - 多次触发订阅。具有多个 if else 条件的嵌套订阅

RXJS - subscription trigger multiple times. Nested Subscription with multiple if else conditions

想优化以下代码: 多个 if else 语句中的多个订阅。

考虑:-

getList(): void {
    this.subs.sink = this.subscription1.subscribe((user) => {
      if (user) {
        this.method1();
      }
    });
  }

method1() {
//code
//code
if (condition){
//code
} else {
this.method2()
}

method2(){
 this.subs.sink = this.subscription2.subscribe(
      (response) => {
if(){
//code
} else {
this.method3();
}
}

method3(){
this.subs.sink = this.subcription3.subscribe(
      (response) => {
//code
}
}

这导致触发多重订阅。

任何帮助。赞赏。

有多种方法可以简化多重订阅。这取决于 // code 究竟代表什么。如果大多数 // code 相同,那么您可以使用 filter 来应用条件。

以下方法假定每个 // code 块都是唯一的。它使用 switchMap 从一个 observable 映射到另一个。如果您不希望将可观察对象转发到订阅的 next 块,您可以 return RxJS EMPTY 常量。它基本上会完成可观察的。

import { EMPTY } from 'rxjs';
import { switchMap } from 'rxjs/operators';

getList(): void {
  this.subs.sink = this.subscription1.pipe(
    switchMap((user: any) => {
      // code
      if (condition) {
        // code
        return EMPTY;
      }
      return this.subscription2;
    }),
    switchMap((response: any) => {
      if (condition) {
        // code
        return EMPTY;
      }
      return this.subscription3;
    })
  ).subscribe({
    next: (response: any) => {
      // response from `this.subscription3`
      // code
    },
    error: (error: any) => {
      // handle error
    }
  });
}