我知道如何使用angular运行一个带有间隔的函数但是每隔x秒运行一个函数的最干净的方法是什么,但是等到上一次调用完成。有时ajax调用会因为某种原因而卡住并且需要更长时间,所以我不希望多次调用被阻塞。
每次呼叫开始和结束时都是一个布尔标志的最佳方法,并检查它或更简单的方式。
答案 0 :(得分:1)
试试这个
$scope.Timer = null
$scope.start = function() {
$scope.Timer = $interval(function() {
// do whatever you wanna to do
}, 1000);
}
$scope.stop = function() {
if ($scope.Timer) {
$interval.cancel($scope.Timer);
}
}
在ajax调用之前停止间隔,并在成功回调之后再次启动它
答案 1 :(得分:0)
如果确保只有在上一次完成后才能再次调用方法,那么您应该使用$timeout
(或setTimeout
)代替$interval
(或setInterval
)。
function runAtAnInterval(){
// Do stuff
// Do stuff
// console.log("do stuff");
$timeout(runAtAnInterval, 1000);
}
runAtAnInterval();
这里有excellent article解释计时器如何在Javascript中运行。