В приведенном ниже коде мы вызываем функцию startTimer
, где мы используем $interval
для запуска запроса к серверной части, пока не получим data.status == "complete"
; и как только статус будет завершен, мы установим flag = true
, и флаг приведет к запуску часов, и он вызовет $scope.stop
для отмены таймера с помощью $interval.cancel
.
Но здесь возникает проблема, т.е. $interval.cancel
не знает, какой таймер остановить первым.
При наличии нескольких запросов на вызов таймера на основе идентификатора завершенный таймер на основе этого идентификатора должен быть отменен.
Итак, мой вопрос: Как отменить таймер на основе идентификатора.
angular.module('timerApp', ['timerApp.controllers']);
angular.module('timerApp.controllers', []).controller('timerController', ['$scope', '$interval',
function($scope, $interval) {
var timer;
var time = 10;
$scope.countdown = time;
$scope.startTimer = function(id) {
timer = $interval(function(id) {
$scope.countdown--;
//res is response from my backend
someRestService(id).then(res);
var data = res;
if (data.status = "complete") {
$scope.timerFlag = true;
}
}, 15000);
};
}
$scope.stopTimer = function() {
$interval.cancel(timer);
};
$scope.$watch() {
if ($scope.timerFlag == true) {
$scope.stopTimer();
}
}
]);
сценарий :
RestapiHit/627
RestapiHit/628
RestapiHit/629
он вызовет запрос 627 и завершит процесс, а затем, когда он собирается отменить с помощью $interval.cance
l, он переходит к последнему и отменяет 629, но не 627.