angular $interval 是否在超过 'count' 参数后自行取消?
Does the angular $interval cancel itself after exceeding 'count' parameter?
关于 angular 中的 $interval 服务的快速问题。查看文档 ($interval),他们会警告您手动取消间隔,但您可以选择在初始化时提供计数参数。一旦计时器 "ticked" 超过了分配的计数,它会自行取消还是只是停止调用该函数并在后台继续运行?
TL;DR;计数完毕,间隔清零
如同一文档所述,建议您在销毁控制器作用域时取消 $interval。类似于:
var t = $interval(function(){
...
}, 1000);
$scope.$on('$destroy', function(){
$interval.cancel(t);
});
delay参数是调用函数的时间间隔。在上面的示例中,该函数每 1000 毫秒调用一次。如果您不取消 $interval,Angular 将保留对它的引用,并可能继续执行您的函数,从而导致您的应用出现奇怪的行为。
考虑到 $interval 提供程序只是本机 setInterval() 的包装器,加上 $apply,查看 Angular 实现 (https://github.com/angular/angular.js/blob/master/src/ng/interval.js),我们可以发现这段代码:
if (count > 0 && iteration >= count) {
deferred.resolve(iteration);
clearInterval(promise.$$intervalId);
delete intervals[promise.$$intervalId];
}
因此,提供商创建的承诺已解决,间隔已清除。取消方法是这样做的:
intervals[promise.$$intervalId].reject('canceled');
$window.clearInterval(promise.$$intervalId);
delete intervals[promise.$$intervalId];
所以,我认为你的假设是正确的。计数后,间隔已经清空
关于 angular 中的 $interval 服务的快速问题。查看文档 ($interval),他们会警告您手动取消间隔,但您可以选择在初始化时提供计数参数。一旦计时器 "ticked" 超过了分配的计数,它会自行取消还是只是停止调用该函数并在后台继续运行?
TL;DR;计数完毕,间隔清零
如同一文档所述,建议您在销毁控制器作用域时取消 $interval。类似于:
var t = $interval(function(){
...
}, 1000);
$scope.$on('$destroy', function(){
$interval.cancel(t);
});
delay参数是调用函数的时间间隔。在上面的示例中,该函数每 1000 毫秒调用一次。如果您不取消 $interval,Angular 将保留对它的引用,并可能继续执行您的函数,从而导致您的应用出现奇怪的行为。
考虑到 $interval 提供程序只是本机 setInterval() 的包装器,加上 $apply,查看 Angular 实现 (https://github.com/angular/angular.js/blob/master/src/ng/interval.js),我们可以发现这段代码:
if (count > 0 && iteration >= count) {
deferred.resolve(iteration);
clearInterval(promise.$$intervalId);
delete intervals[promise.$$intervalId];
}
因此,提供商创建的承诺已解决,间隔已清除。取消方法是这样做的:
intervals[promise.$$intervalId].reject('canceled');
$window.clearInterval(promise.$$intervalId);
delete intervals[promise.$$intervalId];
所以,我认为你的假设是正确的。计数后,间隔已经清空