web-dev-qa-db-fra.com

Angular2: setTimeout appelé une seule fois

J'implémente une fonctionnalité dans Angular2 qui nécessite l'utilisation de setTimeout.

Mon code:

  public ngAfterViewInit(): void {
    this.authenticate_loop();
  }

  private authenticate_loop() {
    setTimeout (() => {
      console.log("Hello from setTimeout");
    }, 500)
  }

setTimeout est démarré par ngAfterViewInit mais la boucle n'est exécutée qu'une seule fois, par exemple. "Hello fromsetTimeout" n'est imprimé qu'une seule fois.

Question: Comment puis-je changer le code pour faire fonctionner setTimeout?

6
Vingtoft
 private authenticate_loop() {
    setInterval (() => {
      console.log("Hello from setInterval");
    }, 500)
 }

setTimeout ne s'exécutera qu'une seule fois, sauf si vous créez un autre setTimeout.

11
dlcardozo

Edit: Donc, pour être plus précis pour les différentes versions angular:

Dans Angular2 vous n'êtes plus obligé d'utiliser $ timeout/$ interval. Donc, pour la question ici setInterval est la bonne solution.

Pour toute personne intéressée par la réponse originale (ciblée sur Angular1), lisez ce qui suit:

Utilisez $ interval dans une application angular.js.

Et si vous souhaitez utiliser setTimeout ailleurs dans une application angular.js, vous devriez mieux utiliser le service $ timeout .

$ timeout et $ interval ont l'avantage de garder votre portée mis à jour, contrairement à setTimeout/setInterval.

3
Tobi