Search code examples
javascriptangularjstimeout

$timeout.cancel() is not cancelling the timeout


I'm running a 3 minutes timeout and in that timeout i am running another function at particular durations.But when i'm trying to cancel the timeout its still running and the function inside it is still getting executed.Here's my code

$scope.time = 180000;
var timer = function() {
    if ($scope.time > 0) {
        $scope.time -= 1000;
        var durations = [170000, 150000, 130000, 110000, 90000, 70000, 50000, 30000, 10000];
        if (durations.includes($scope.time)) {
            dataService.acceptNotify(payload).then(function(response) {
                console.log(response);
                if (response.data.success === true) {
                    $mdToast.showSimple(response.data.msg);
                    $mdDialog.hide();
                    $timeout.cancel(timeout);
                }
            })
        }
        $timeout(timer, 1000);
    } else {
        $mdDialog.hide();
    }
}
var timeout = $timeout(timer, 1000);

Solution

  • You are just not capturing the timer instance into your variable, hence not cancelling it.

    Try changing this line in your code:

    $timeout(timer, 1000);
    

    to

    timeout = $timeout(timer, 1000);