根据 $interval.timer 中传递的 id 取消 $interval.cancel
Cancelling $interval.cancel based on id passed in $interval.timer
在下面给出的代码中,我们正在调用 startTimer
函数,其中我们使用 $interval
触发对后端的请求,直到我们获得 data.status == "complete"
;一旦状态完成,我们设置 flag = true
和标志将导致触发手表,它调用 $scope.stop
函数使用 $interval.cancel
.
取消计时器
但是这里出现了问题,即 $interval.cancel
不知道先停止哪个计时器。
当有多个请求调用基于id的定时器时,基于该id完成的定时器应该被取消。
所以我的问题是如何根据id取消定时器。
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
看看:
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[id] = $interval(function(id) {
$scope.countdown--;
//res is response from my backend
someRestService(id).then(res);
var data = res;
if (data.status = "complete") {
$scope.stopTimer(id);
}
}, 15000);
};
}
$scope.stopTimer = function(id) {
$interval.cancel(timer[id]);
delete timer[id];
};
]);
现在,您只分配了一个 timer
值,因为它是在控制器级别声明的。但是因为,您可能多次调用 $interval
所以我认为这种方法应该更好用。
在下面给出的代码中,我们正在调用 startTimer
函数,其中我们使用 $interval
触发对后端的请求,直到我们获得 data.status == "complete"
;一旦状态完成,我们设置 flag = true
和标志将导致触发手表,它调用 $scope.stop
函数使用 $interval.cancel
.
但是这里出现了问题,即 $interval.cancel
不知道先停止哪个计时器。
当有多个请求调用基于id的定时器时,基于该id完成的定时器应该被取消。
所以我的问题是如何根据id取消定时器。
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
看看:
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[id] = $interval(function(id) {
$scope.countdown--;
//res is response from my backend
someRestService(id).then(res);
var data = res;
if (data.status = "complete") {
$scope.stopTimer(id);
}
}, 15000);
};
}
$scope.stopTimer = function(id) {
$interval.cancel(timer[id]);
delete timer[id];
};
]);
现在,您只分配了一个 timer
值,因为它是在控制器级别声明的。但是因为,您可能多次调用 $interval
所以我认为这种方法应该更好用。