刷新服务中的数据

时间:2018-07-23 19:52:43

标签: angular rxjs6

API中的数据不断变化。在Angular中刷新数据的最佳方法是什么? bitfinex.com API

我有一个服务和组件。在服务中,我使用“ get”下载数据。

服务:

getPrice(){

  return this.http.get('xxx');

}

组件:

ngOnInit() {

   this.getPrices();

    setInterval(() => {
      this.getPrices();
    }, 5000);

  }

  getPrices(){
    this.tick.getPrice().subscribe(prices => {
      console.log(prices);
    });
  }

正如您在组件中看到的那样,我使用“ setInterval”并每5秒刷新一次。

我试图直接在服务中刷新数据。

return interval(5000).pipe(

      // ignore new term if same as previous term
      distinctUntilChanged(),

      // switch to new search observable each time the term changes
      switchMap(() => this.http.get('xxx')),
    );

但是它仅在5秒后显示数据。

4 个答案:

答案 0 :(得分:0)

我已经尝试在the source code中重新创建您的问题,但是我不能。

您能否尝试一下并告诉我它有什么问题(除了服务器端的CORS之外,您无能为力)

可能您的问题与此有关: this stackblitz

根据他们的政策,您不能每5秒钟轮询一次API(您正在DDOSing他们:P)。您每分钟可以执行10个请求。

尝试他们的API policy在数据更改时将数据流式传输给您,而无需从客户端进行轮询(服务器将在可用时向您发送新数据,您只需要处理它即可)。

答案 1 :(得分:0)

1)如果您不破坏重定向/页面离开时的事件监听器,它将在后台运行。

我建议实现析构函数。

deregisterListeners() {
    this.eventListeners.forEach(listener => {
        listener();
    });
    _.remove(this.eventListeners); //this is lodash,  it loops through all instances of w/e you're looping through
    clearInterval(this.intervalFunc);
}

然后将您的事件监听器添加到ngOnInit

this.eventListeners.push(this.$scope.$on("$destroy", this.deregisterListeners.bind(this)));
this.intervalFunc = setInterval(() => {
     // your code / function that calls the data here
 });

答案 2 :(得分:0)

当您设置每3秒刷新一次时,它们会阻止。 5秒为最佳,经过测试:D

首先,我想在没有网络套接字的情况下学习,因此我的问题是如何做到最好。

答案 3 :(得分:0)

return interval(5000).pipe(

  // ignore new term if same as previous term
  distinctUntilChanged(),

  // switch to new search observable each time the term changes
  switchMap(() => this.http.get('xxx')),
);

问题出在此代码块中。 interval(5000)在最初的5秒钟后每5秒钟仅发射一次。这是您观察到的行为。 您可以使用timer(0,5000)来获得一个从1个发射开始然后每5秒钟重复一次的可观察物。

此外,我不确定distinctUntilChanged()在这里应该做什么。 interval(5000)每5秒就会发出一个递增的数字,因此该值将始终是唯一的。

switchMap之后,您似乎不需要多余的逗号。