2017-10-01 1 views
0

Je me demande si c'est bon d'avoir un $timeout qui s'annule après son exécution. En général, ce que je vois est des gens qui disent que vous devez annuler votre $timeout « s dans le $destroy comme ceci:

var timeout = $timeout(function() { 
    // stuff 
}); 

$scope.$on("$destroy", function(){ 
    $timeout.cancel(timeout); 
}); 

Mais, est-il correct de le faire à la place:

var timeout = $timeout(function() { 
    // stuff 
    $timeout.cancel(timeout); 
}); 
+0

Le code «is it OK» que vous avez proposé tente d'annuler le délai d'attente après qu'il a déjà été exécuté. À ce stade, il n'y a rien à annuler. Le point d'annulation à l'intérieur du gestionnaire d'événements '$ destroy' serait d'empêcher l'exécution d'un délai d'expiration planifié après la destruction. – nnnnnn

+1

Ce que vous faites n'a aucun sens, je pense que vous cherchez intervalle ou quelque chose comme ça, alors cela pourrait avoir du sens. Timeout exécutera votre fonction en un nombre donné de secondes, à l'intérieur de cette fonction, votre code est efficace, tout comme la ligne vide ou l'instruction de retour, puisque les secondes ont déjà passé - dans votre cas 0 secondes. – pegla

+0

Merci @nnnnnn et pegla. Logique. – joeygrimes

Répondre

0

Lorsque l'élément DOM est retiré de la page, AngularJS déclenchera l'événement $ destroy sur l'étendue. Cela nous donne une chance d'annuler minuterie en attente que nous pourrions avoir.

$ timeout() renvoie un objet de promesse. Cet objet peut être fourni à la fonction $ timeout.cancel() pour annuler le timeout.

$scope.$on('$destroy', function(){ 
    $timeout.cancel(promise); 
});