【问题标题】:RxJs - Can I use a BehaviorSubject to create a timer?RxJs - 我可以使用 BehaviorSubject 创建计时器吗?
【发布时间】:2019-05-28 18:47:51
【问题描述】:

我创建了一个时间加载器,我可以使用可观察间隔停止和重新启动:

   start(time) {

    this.max = time;
    this.intervalObs = Observable.interval(time)
      .takeWhile(_ => !this.isFinished)
      .do(i =>{this.current += 1 ; console.log(this.current);} )
     this.intervalSub$ = this.intervalObs.subscribe();
  }

  finish() {
    this.intervalSub$.unsubscribe();
  }

我想用行为主题做同样的事情。有可能吗?如何实现?

【问题讨论】:

  • 不清楚为什么以及在哪里需要 BehaviorSubject。请更新您的问题,以向您尝试实施的逻辑和面临的问题添加更多详细信息。那么我们会提供更好的帮助

标签: rxjs behaviorsubject


【解决方案1】:

你做错了什么。 Subjects 是 ObserverObservable。在您的示例中,至少按照我的理解,您正在使用.. 一个间隔,这意味着 .interval() 实现就足够了。

所以问题是 - 你想达到什么目标?

【讨论】:

  • 在我的示例中,当我尝试在 finish() 方法中取消订阅时,我收到一个错误,我试图从 undefined 取消订阅,这意味着我一直引用的订阅在那里未定义。所以我想使用行为主题以另一种方式做到这一点
  • @M.Maria,您很可能在不同/空的上下文中调用startfinish。请参阅此mdn article 以获取有关this 用法的更多详细信息。
【解决方案2】:

如果你有一个名为 finalize 的主题,你可以用它来完成 observable

finalise = new Subject();

this.intervalObs.pipe(takeUntil(this.finalise)).subscribe();

finish() {
  // When finalise emits the other observable completes
  this.finalise.next();
}

【讨论】:

    猜你喜欢
    • 2018-07-28
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 2017-05-04
    • 2014-04-17
    相关资源
    最近更新 更多