В настоящее время у меня есть угловое приложение, которое при входе пользователя в систему вызывает службу, чтобы начать вызов сервера для обновления счетчика, разрешая возврат на стороне сервера только в том случае, если пользователь аутентифицирован.
resource.approvalsCount = 0;
var approvalsCountTimer;
resource.getApprovalsCount = function (username) {
return resource.query({
username: username,
q: 'approvalsCount'
}).$then(function (response) {
resource.approvalsCount = response.data.count;
approvalsCountTimer = $timeout(resource.getApprovalsCount, 3000);
return resource.approvalsCount;
});
};
Когда пользователь выходит из системы, я пытаюсь отменить этот счетчик, иначе сервер вернет несанкционированную ошибку 401, вызвав функцию на основе ресурса:
resource.cancelTimers = function () {
$timeout.cancel(approvalsCountTimer);
}
Проблема в том, что счетчик продолжает работать даже после того, как я вызываю отмену по истечении времени ожидания $, которое возвращает 401 с сервера. Выход из консоли возвращает, функция отмены возвращает true (отмена сработала). Я пробовал несколько разных мест начала $timeout безрезультатно, есть ли способ убедиться, что все $timeouts отменены? Я не понимаю, чего мне не хватает в этой конфигурации.
ИЗМЕНИТЬ
angular.module('resources.approvals.approvals', ['ngResource'])
.factory('Approvals', ['$timeout', '$resource', function ($timeout, $resource) {
var resource = $resource('/approvals/:username/:requestID', {}, {
'update': {
method: 'PUT'
}
});
resource.approvalsCount = 0;
var approvalsCountTimer;
resource.getApprovalsCount = function (username) {
return resource.query({
username: username,
q: 'approvalsCount'
}).$then(function (response) {
resource.approvalsCount = response.data.count;
approvalsCountTimer = $timeout(resource.getApprovalsCount, 3000);
return resource.approvalsCount;
});
};
resource.cancelTimers = function () {
$timeout.cancel(approvalsCountTimer);
};
return resource;
}]);
cancelTimers
в своем коде? - person zs2020   schedule 08.08.2013