Angularjs 取消$interval.cancel基于传入$interval.timer的id

Angularjs 取消$interval.cancel基于传入$interval.timer的id,angularjs,timer,setinterval,clearinterval,Angularjs,Timer,Setinterval,Clearinterval,在下面给定的代码中,我们调用startTimer函数,在这里我们使用$interval触发对后端的请求,直到我们获得数据。status==“complete”;一旦状态完成,我们设置标志=true,标志将触发手表,它调用$scope.stop函数以使用$interval.cancel取消计时器 但这里出现了一个问题,即,$interval.cancel不知道首先停止哪个计时器 当有多个请求基于id调用计时器时,应取消基于该id完成的计时器 因此,我的问题是如何根据id取消计时器 angular.

在下面给定的代码中,我们调用
startTimer
函数,在这里我们使用
$interval
触发对后端的请求,直到我们获得
数据。status==“complete”
;一旦状态完成,我们设置
标志=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];
    };

]);

现在,您只需要在控制器级别声明一个
计时器
值。但是,由于您可能会多次调用
$interval
,因此我认为这种方法应该更有效。

看看我的答案,我不确定它是否会给出一些错误,但这种方法应该足够了。如果您需要一个工作代码,您可以在plunkr.com上创建一个演示代码并告诉我