【问题标题】:Angular2 Observable with intervalAngular2 Observable 有间隔
【发布时间】:2016-06-23 14:08:35
【问题描述】:

我有一个函数需要大约每 500 毫秒调用一次。我正在考虑使用 angular2 执行此操作的方式是使用间隔和可观察量。我已经尝试过这个函数来创建 observable:

counter() {
  return Observable.create(observer => {
    setInterval(() => {
      return this.media.getCurrentPosition();
    }, 500)
  })
}

使用此代码为订阅者:

test() {
  this.playerService.initUrl(xxxx) // This works
  this.playerService.counter().subscribe(data => {
    res => {
      console.log(data);
    }
  })
}

我对 observables 和 angular2 非常陌生,所以我可能完全采用了错误的方法。任何帮助表示赞赏。

【问题讨论】:

    标签: javascript angular intervals rxjs observable


    【解决方案1】:

    Observable 类有一个静态的interval 方法,以毫秒为参数(如setInterval 方法):

    counter() {
        return Observable
            .interval(500)
            .flatMap(() => {
                return this.media.getCurrentPosition();
            });
    }
    

    在您的组件中或任何地方:

    test() {
      this.playerService.initUrl(xxxx) // This works
      this.playerService.counter().subscribe(
          data => {
              console.log(data);
          }
       );
    }
    

    【讨论】:

    • 这很好用,谢谢!我确实必须将 .flatmap() 更改为 .flatMap() 才能使其正常工作。
    • 只是给别人的笔记; Observable.interval 是一个静态/类方法,你不能在 Observable 的实例上调用它(我在尝试重复 http.get 时遇到了角度问题)
    • Observable.interval() 现在已被弃用,这不是创建此类 observable 的首选方式。这样做的首选方法是通过 IntervalObservable 或 TimerObservable。 [目前在 Typscript 2.5.2、rxjs 5.4.3、Angular 5.0.0]
    • @Gokul 你有这方面的资料吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    相关资源
    最近更新 更多