我有以下方法返回一个observable:
getWhatsUp() {
return this.http.get('user/whatsUp?token=' + this.getToken())
.map((res:Response) => res.json())
.catch(
err => {
this.checkToken(err);
return Observable.throw('Unverified token');
}
);
}
我通过以下方式在我的组件中使用它:
ngOnInit() {
this.getWhatsUp();
}
getWhatsUp() {
this.service.getWhatsUp()
.subscribe(
data => {
this.activities = data.activities;
},
error => { console.log("Error #333"); }
);
}
如何每隔10秒运行一次以更新活动并确保api调用不会堆叠并多次运行?
我了解interval
方法,但我不确定如何在我的设置中使用它
答案 0 :(得分:4)
为什么不呢:
ngOnInit() {
setInterval(() => this.getWhatsUp, 10000);
}
如果您需要有关语法的更多信息,请使用ES6 Arrow function again。
答案 1 :(得分:1)
RxJS方式
ngOnInit(){
let sec = 10;
Observable.timer(0, sec * 1000).subscribe(this.getWhatsUp());
}
答案 2 :(得分:0)
一种可能的解决方案是创建一个附加函数作为包含setInterval的处理程序。 setInterval(myTimer,10000)
<div class="col-sm-3"></div>
<div class="col-sm-2">
<div class="checkbox-inline">
<label class="checkbox-inline"><input type="checkbox" value="">Adult News</label>
</div>
</div>
<div class="row checkbox-row">
<div>
<div class="checkbox-inline">
<label class="checkbox-inline"><input type="checkbox" value="">Youth News</label>
</div>
</div>
</div>
</div>
</div>
答案 3 :(得分:-2)
更好的解决方案是使用角度提供者 $ interval 和 $ destroy
示例:由于此解决方案会破坏呼叫,如果当前状态/控制器已更改
var stop=$interval(function () {
function_call();
}, 12000)
$scope.stopInterval = function () {
if (angular.isDefined(stop)) {
$interval.cancel(stop);
stop = undefined;
}
};
$scope.$on('$destroy', function () {
// Make sure that the interval is destroyed too
$scope.stopInterval();
});