How to get angular $ interval status - check if interval has been canceled or not

I am new to Angular (and JS) and a little confused.

I start the timer with:

var getOverviewMapTimer = $interval($scope.UpdateOverviewMap, UPDATE_FREQUENCY); 

and, if I understand it, getOverviewMapTimeris a "promise."

I want to check if the timer works, and excluded that if I ever $interval.cancel(getOverviewMapTimer);, then it getOverviewMapTimerwill null, and I could check it.

This does not seem to be the case.

Should I explicitly destroy the promise (what does the timer promise that has been canceled?) Mean.? If so, how should I explicitly set it to null?

I think I should use cancel(getOverviewMapTimer);, but not 100% sure, because it getOverviewMapTimerstill doesn't matter null.

thanks for the help

+4
3

var getOverviewMapTimer = $interval(...); getOverviewMapTimer ( ).

$interval.cancel(getOverviewMapTimer) ( ) , getOverviewMapTimer, null. getOverviewMapTimer , null - (.. null):

var getOverviewMapTimer = $interval(...);
...
$interval.cancel(getOverviewMapTimer);
getOverviewMapTimer = null;

:

, , (, cancelled true ).
Angular , , , Service Decorator, "" $interval, cancel(), cancelled true -:

/* Service Decorators can be configured in `config` blocks */
app.config(function ($provide) {

    /* Register a decorator for the `$interval` service */
    $provide.decorator('$interval', function ($delegate) {

        /* Keep a reference to the original `cancel()` method */
        var originalCancel = $delegate.cancel;

        /* Define a new `cancel()` method */
        $delegate.cancel = function (intervalPromise) {

            /* First, call the original `cancel()` method */
            var retValue = originalCancel(intervalPromise);

            /* If the promise has been successfully cancelled,
             * add a `cancelled` property (with value `true`) */
            if (retValue && intervalPromise) {
                intervalPromise.cancelled = true;
            }

            /* Return the value returned by the original method */
            return retValue;
        };

        /* Return the original (but "augmented") service */
        return $delegate;
    });
});

$interval, , interval-prom cancelled, , .

var getOverviewMapTimer = $interval(...);
...
console.log(!!getOverviewMapTimer.cancelled);   // false
$interval.cancel(getOverviewMapTimer);
console.log(!!getOverviewMapTimer.cancelled);   // true

. .

+14

, getOverviewMapTimer null $interval.cancel(getOverviewMapTimer);.

, , . , :

if ($interval.cancel(getOverviewMapTimer)) {
  getOverviewMapTimer = null;
}

var getOverviewMapTimer = $interval($scope.UpdateOverviewMap, UPDATE_FREQUENCY);
getOverviewMapTimer.catch(function() { getOverviewMapTimer = null; }); 

, .

+2

easy

var interval = $interval(function() { }, 1000);
console.log(interval.$$state.status); //0

$interval.cancel(interval);
console.log(interval.$$state.status); //2

if(interval.$$state.status == 0)
    //valid
else
    //invalid
+2
source

Source: https://habr.com/ru/post/1537050/


All Articles