Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何清除或停止angularjs中的多个时间间隔?_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript 如何清除或停止angularjs中的多个时间间隔?

Javascript 如何清除或停止angularjs中的多个时间间隔?,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我有一个行列表,显示了multiple button name Retry,点击Retry按钮后,它调用angular$interval,我调用了$interval内的一个API,当retryCount为4时,我想停止$interval,这不是调用single$interval,而是调用multiple$interval,我的代码只用于单击Retry按钮,如果单击“多次重试”按钮,$interval stopped不起作用 self.retryJob = function (jobId,row)

我有一个行列表,显示了multiple button name Retry,点击Retry按钮后,它调用angular$interval,我调用了$interval内的一个API,当retryCount为4时,我想停止$interval,这不是调用single$interval,而是调用multiple$interval,我的代码只用于单击Retry按钮,如果单击“多次重试”按钮,$interval stopped不起作用

self.retryJob = function (jobId,row) {
            row.submitButtonText = "Retrying..";  
            JobService.submitJob(jobId).then(function (res) {
                if(!res.data.error){
                    row.status = "retrying";
                    row.retryCount = 0;
                    row.submitButtonText = "Retry"
                    //$scope.stop();
                    promise = $interval(function() {
                                $scope.refreshItems(jobId,row);
                              },1000);
                }else{
                    row.submitButtonText = "Error:Try Again";
                }
            }).catch(function (err) {

            });
        };
        $scope.refreshItems = function(jobId,row){
            JobService.getJobById(jobId).then(function (res) {
                console.log("res is ",res.data);
                if(!res.data.error){
                    row.status = res.data.status;
                    row.retryCount = res.data.retryCount;
                    //console.log("res.data.status="+jobId,res.data.status);
                    if(res.data.retryCount=="4" && (res.data.jobId==jobId)){
                        console.log("stoped api call");
                        //// Not working need to modify later
                        //$scope.stop();
                        $interval.cancel(promise);
                    }
                }else{
                }
            }).catch(function (err) {
                //row.killButtonText = "Error:Try Again";
            })
        }
试试这个:

self.retryJob = function (jobId,row) {
        row.submitButtonText = "Retrying..";  
        JobService.submitJob(jobId).then(function (res) {
            if(!res.data.error){
                row.status = "retrying";
                row.retryCount = 0;
                row.submitButtonText = "Retry"
                //$scope.stop();
                $rootScope.promise = $interval(function() {
                            $scope.refreshItems(jobId,row);
                          },1000);
            }else{
                row.submitButtonText = "Error:Try Again";
            }
        }).catch(function (err) {

        });
    };
    $scope.refreshItems = function(jobId,row){
        JobService.getJobById(jobId).then(function (res) {
            console.log("res is ",res.data);
            if(!res.data.error){
                row.status = res.data.status;
                row.retryCount = res.data.retryCount;
                //console.log("res.data.status="+jobId,res.data.status);
                if(res.data.retryCount=="4" && (res.data.jobId==jobId)){
                    console.log("stoped api call");
                    //// Not working need to modify later
                    //$scope.stop();
                    $interval.cancel($rootScope.promise);
                }
            }else{
            }
        }).catch(function (err) {
            //row.killButtonText = "Error:Try Again";
        })
    }

确切的答案可能取决于您的JobService正在做什么&返回,但这可能会起到一定的作用:

    self.retryJob = function (jobId,row) {
        row.submitButtonText = "Retrying..";  
        JobService.submitJob(jobId).then(function (res) {
            if(!res.data.error){
                row.status = "retrying";
                row.retryCount = 0;
                row.submitButtonText = "Retry"
                //$scope.stop();
                var o = {};
                o.interval = $interval(function() {
                            $scope.refreshItems(jobId,row,o);
                          },1000);
            }else{
                row.submitButtonText = "Error:Try Again";
            }
        }).catch(function (err) {

        });
    };
    $scope.refreshItems = function(jobId,row,o){
        JobService.getJobById(jobId).then(function (res) {
            console.log("res is ",res.data);
            if(!res.data.error){
                row.status = res.data.status;
                row.retryCount = res.data.retryCount;
                //console.log("res.data.status="+jobId,res.data.status);
                if(res.data.retryCount=="4" && (res.data.jobId==jobId)){
                    console.log("stoped api call");
                    //// Not working need to modify later
                    //$scope.stop();
                    $interval.cancel(o.interval);
                }
            }else{
            }
        }).catch(function (err) {
            //row.killButtonText = "Error:Try Again";
        })
    }