簡體   English   中英

Angular計時器滿足條件后取消$ proval並帶有承諾

[英]Cancelling $interval with promise after condition is met with Angular timer

我很難取消$ interval服務。 我不確定自己想念的是什么。

我已初始化一個計數器,該計數器正在對計數屬性進行遞減計數。 $ scope.sessionCounter

           $scope.sessionCounter = 5;

            var intializeSessionCounter = function () {
                $scope.sessionTime();
                $interval(function () {
                    $scope.sessionCounter--;
                    if ($scope.sessionCounter > 1) {
                        console.log('timedown', $scope.sessionCounter);
                    }
                    else {
                        $scope.showSessionTimeoutWarningModal();
                        $scope.stop();


                    }
                }, 1000);
            }
            intializeSessionCounter();

最重要的是,通過if語句時,一切工作正常。 當$ scope.sessionCounter變為1時,我命中了else語句。 我要打開的模態彈出。 下一個$ scope.stop被命中並且$ interval.cancel(null)被讀取。 但是,什么都沒有取消,並且我的模式繼續重新打開,因為$ interval繼續變為負數。

            $scope.stop = function () {
                $interval.cancel(null);
            }

您必須將$ interval提供程序綁定到某個變量。

嘗試這個 :

$scope.sessionCounter = 5;

var intializeSessionCounter = function () {
      $scope.sessionTime();
      $scope.interval = $interval(function () {
          $scope.sessionCounter--;
          if ($scope.sessionCounter > 1) {
              console.log('timedown', $scope.sessionCounter);
          }
          else {
              $scope.showSessionTimeoutWarningModal();
              $scope.stop();
          }
      }, 1000);
}
intializeSessionCounter();

... 
$scope.stop = function () {
    if( $scope.interval !== undefined){
        $interval.cancel($scope.interval);
        $scope.interval = undefined;
    }        

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM