RxJs - 我可以将BehaviorSubject 与takeUntil 一起使用吗?

Bil*_*ams 3 javascript behaviorsubject rxjs5

我想使用BehaviorSubject 使用 takeUntil 取消订阅另一个 Observable。当我使用 takeUntil 订阅 Observable 时,它​​似乎立即取消订阅。这段代码适用于主题,但我想要一个初始值集。

我正在使用 rxjs 5.5.6

//MyService1
class Observable1 {
  status1: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);

  displayStatus1(val: boolean) {
    this.status1.next(val)
  }
}

//MyService2
class Observable2 {
  status2: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);

  displayStatus2(val: boolean) {
    this.status2.next(val)
  }
}

//MyComponent
status: boolean;

constructor(private myService1: MyService1, private myService2: MyService2) {
   this.subscribeToObservable1();
   this.subscribeToObservable2();
}

subscribeToObservable1() {
  this.myService1.status1.subscribe((val: boolean) => {
    console.log('val: ', val);
  }
}

subscribeToObservable2() {
  this.myService2.status2
    .takeUntil(this.myService1.status1)
    .subscribe((val: boolean) => {
      this.status = val;
    }
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*ick 6

当然,您可以简单地使用skip()跳过第一个初始值:

this.status2$
    .pipe(
        takeUntil(
           this.status1$.pipe(skip(1))
        ),
    )
    .subscribe((val: boolean) => {
         // I execute until status1$ emits
    }
Run Code Online (Sandbox Code Playgroud)

顺便说一句:从 RxJS >= 5.5 开始,您可以像我的示例中那样使用管道。$另外,您可以在末尾使用 a 来命名您的可观察量,这样它就会显示为“status1stream”