超过'count'参数后,角度$ interval会自行取消吗?

时间:2015-07-12 01:16:01

标签: javascript angularjs intervals

有关角度的$ interval服务的快速问题。查看文档($interval),它们会警告您手动取消间隔,但您可以选择在初始化时提供计数参数。一旦计时器“勾选”了超过分配的计数,它是否会自行取消,或者只是停止调用该功能并在后台继续使用?

1 个答案:

答案 0 :(得分:0)

正如相同的文档所述,建议您在取消控制器范围时取消$ interval。类似的东西:

var t = $interval(function(){
    ...
}, 1000);


$scope.$on('$destroy', function(){
    $interval.cancel(t);
});

延迟参数是调用函数的时间间隔。在上面的示例中,每1000毫秒调用一次该函数。如果你没有取消$ interval,Angular将保留对它的引用,并可能继续执行你的函数,导致你的应用程序出现奇怪的行为。

考虑到$ interval提供程序只是本机setInterval()的包装器,带有$ apply的加法,查看Angular实现(https://github.com/angular/angular.js/blob/master/src/ng/interval.js),我们可以找到这段代码: / p>

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

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