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];

所以,我认为你的假设是正确的。计数后,间隔已经清空