2017-10-12 72 views
0

我有一个web服务,提供有关当前在收音机上播放的(最后一首)歌曲的信息。用可观察的和更新的数据检查api的变化

我的observable如何更新我自己的http请求中的数据?

我的供应商:

load() : Observable<{}> { 
    return this.http.get(this.URL).map(res => res.json()); 
    } 

我的组件:

this.radio.load().subscribe(data => { 
    console.log(data) 
}) 

我想要什么,基本上是 “数据” 每一次Web服务响应的变化进行更新!我怎样才能做到这一点 ?

非常感谢您

+0

这是否意味着你要对这个Web服务调用的时间每X量? – Catalyst

+0

是的,每当数据发生变化时,除非我无法知道歌曲何时结束,所以我不知道数据何时更改。 – Joni

回答

0

你可以做这样的事情:在您的组件,请致电load()每10秒,并检查数据是否已改变(我相信你想要保存在你的财产包含最新数据的组件)。

以下是如何与RxJS做到这一点:

IntervalObservable.create(10 * 1000 /* 10 seconds */) 
    .takeWhile(() => this.alive) // only fires when component is alive 
    .subscribe(() => { 
     .radio.load() 
     .subscribe(data => { 
      /* ...check if data has changed... */ 
      console.log(data); 
     }); 
}); 

关于this.alive - 这仅仅只是一个需要当组件被销毁被设置为false,您的组件属性(即在调用时ngOnDestroy)并且在组件初始化时需要设置为true(可能在ngOnInit)。

(你当然可以,用做同样的事情的更传统setIntervalclearInterval方式。)