У меня есть приложение SPA с несколькими представлениями в AngularJS, я определил $interval, который запускается из другого контроллера представления. Когда я нажимаю кнопку с вызванной функцией и строкой $interval.cancel(); в нем он не останавливается.
Вот примеры моего кода:
ГлавныйКонтроллер:
$scope.$on("startInterval", function () {
$interval(function warningsControl() {
console.info("Timer stamp!");
$.ajax({
// some web api call which works fine
})
}, 10000);
});
$scope.stop = function () {
$interval.cancel();
}
$scope.logoutButton = {
text: "Logout",
type: "normal",
visible: false,
onClick: function () {
// some working code
$scope.stop();
var logoutBtn = $("#logout-btn").dxButton("instance");
logoutBtn.option({
visible: false
});
}
}
И ВторойКонтроллер:
$scope.authenticateButton = {
type: "default",
text: "Log In",
onClick: function () {
$.ajax({
// some web api calling
success: (data) => {
// some working code
$rootScope.$broadcast("startInterval");
}
})
}
}
Этот код запускает интервал, и все работает нормально, пока я не нажму кнопку «Выход из системы» - он сделал все, кроме остановки интервала.
Есть идеи, как это исправить? Буду признателен за совет.
Я смотрел на это раньше, там я обнаружил, что строка $interval.cancel() используется для остановки интервала, но она не работает в моем коде, и я не смог найти там никакого ответа на мою проблему.
Судя по ответу в связанном дубликате, вам нужно сохранить интервал и передать его cancel(). «Не работает» не помогает; вы получаете какие-либо сообщения об ошибках в консоли?
Консоль без ошибок (за исключением тех, где программа вызывает сервер без авторизованного пользователя - $interval все еще работает, но не должен). Но благодаря ответу Quantum мне удалось это сделать.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Функция $interval должна возвращать какой-то идентификатор, который вы можете передать в $interval.cancel(). Например:
var int_id = $interval( func, time )
//...later...
$interval.cancel(int_id)
Большое спасибо, я забыл сохранить $interval в переменной, а затем отправить его в функцию отмены. Это произошло из-за моего непонимания $interval вообще.
Возможный дубликат Как очистить или остановить timeInterval в angularjs?