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秒后显示数据。
答案 0 :(得分:0)
我已经尝试在the source code中重新创建您的问题,但是我不能。
您能否尝试一下并告诉我它有什么问题(除了服务器端的CORS之外,您无能为力)
可能您的问题与此有关: this stackblitz
根据他们的政策,您不能每5秒钟轮询一次API(您正在DDOSing他们:P)。您每分钟可以执行10个请求。
尝试他们的在数据更改时将数据流式传输给您,而无需从客户端进行轮询(服务器将在可用时向您发送新数据,您只需要处理它即可)。
答案 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
之后,您似乎不需要多余的逗号。