2016-11-03 6 views
5

Ich implementiere Funktionalität in Angular2, die die Verwendung von setTimeout erfordert.Angular2: setTimeout nur einmal aufgerufen

Mein Code:

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

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

setTimeout wird gestartet, indem ngAfterViewInit aber die Schleife nur einmal ausgeführt wird, z. B. "Hello fromsetTimeout" wird nur einmal gedruckt.

Frage: Wie kann ich den Code ändern, um das setTimeout zu arbeiten?

+1

Da Timeout nur einmal läuft ... – epascarello

+0

können Sie sehen http://blog.neilni.com/2016/03/27/settimeout-in-angular-2/ –

+0

Bearbeiten Sie Ihre Frage zu eckigen 1 anstelle von eckigen 2 , Sie haben eine Antwort akzeptiert, die eckige 1 Dienste verwendet. –

Antwort

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

setTimeout wird nur einmal ausgeführt, es sei denn, Sie eine andere setTimeout erstellen.

3

Edit: Also für die unterschiedlichen Winkel Versionen genauer zu sein:

In Angular2 Sie verpflichtet sind, nicht mehr $ timeout/$ Intervall zu verwenden. Also für die Frage hier setInterval ist die richtige Lösung.

Für ein Interesse an der ursprünglichen Reaktion (auf Angular1 gezielte) lesen Sie die folgenden:

Verwenden $interval innerhalb einer Angularjs Anwendung.

Und wenn Sie setTimeout woanders in einer angular.js Anwendung verwenden möchten, sollten Sie besser den $timeout Dienst verwenden.

$ timeout und $ Intervall haben den Vorteil, dass sie Ihren Umfang neuesten Stand zu halten, die setTimeout/setInterval nicht.

+1

Ihre Antwort ist richtig, aber die verwendeten Beispiele sind angular1. – Vingtoft

Verwandte Themen