Угловой $ интервал отменяется после превышения параметра count?
Краткий вопрос об услуге $interval в угловых. Просматривая документы ( $interval), они предупреждают вас об отмене интервалов вручную, но у вас есть возможность указать параметр count при инициализации. После того, как таймер "помечен" прошедшим отсчетом, он отменяет себя или просто прекращает вызывать функцию и продолжает жить в фоновом режиме?
1 ответ
Как сказано в той же документации, рекомендуется отменить интервал $, когда область действия вашего контроллера нарушена. Что-то вроде:
var t = $interval(function(){
...
}, 1000);
$scope.$on('$destroy', function(){
$interval.cancel(t);
});
Параметр задержки - это интервал времени, в течение которого вызывается функция. В приведенном выше примере функция вызывается каждые 1000 миллисекунд. Если вы не отмените интервал $, 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];
Итак, я думаю, что ваше предположение верно. После подсчета интервал уже очищен.