Rxjs:可观察完成并重新启动后,takeUntil()的错误行为?

时间:2018-06-27 11:26:13

标签: rxjs observable subject

我有以下代码:

 const reconnectorAfterPingPongFailed$ = Observable.of('timeout').delay(5000).takeUntil(this.serviceAlive$);

        reconnectorAfterPingPongFailed$
          .race(this.pingPong$)
          .take(1)
          .repeat()
          .takeUntil(this.serviceAlive$)
          .do(() => console.log("[ping-pong]:","repeated"))
          .subscribe((data: any) => {
// some code
});

我对这段代码有什么期望?

  1. 每隔N秒,我们就会从服务器收到一些“ pong”消息,这些消息通常用于制作此消息。pingPong$ .next(“ pong”)
  2. 转到race(),如果有pong,则在订阅中发出“ pong”命令;如果“ pong”不存在超过5000秒的延迟,则得到“超时”(事件来自reconnectorAfterPingPongFailed$
  3. 仅当我的服务处于活动状态时,我才想处理订阅。
  4. 因此,当我注销时,我分别创建.next().complete()
  5. 当我第一次注销时,没有看到来自.do()的console.log消息
  6. 当我再次登录时,将再次重新创建此主题的私人serviceAlive$: Subject<void> = new Subject<void>();
  7. 当我再次注销时,似乎该代码.do(() => console.log("[ping-pong]:","repeated"))仍然有效

0 个答案:

没有答案