2016-06-23 20 views
3

Ich habe eine Funktion, die etwa alle 500ms aufgerufen werden muss. Die Art, wie ich es mit angular2 mache, ist die Verwendung von Intervallen und Observablen. Ich habe diese Funktion versucht, die beobachtbar zu erstellen:Angular2 Observable mit Intervall

counter() { 
    return Observable.create(observer => { 
    setInterval(() => { 
     return this.media.getCurrentPosition(); 
    }, 500) 
    }) 
} 

Mit diesem Code für den Teilnehmer:

test() { 
    this.playerService.initUrl(xxxx) // This works 
    this.playerService.counter().subscribe(data => { 
    res => { 
     console.log(data); 
    } 
    }) 
} 

Ich bin sehr neu für Observablen und angular2 so könnte ich völlig falsche Ansatz ist. Jede Hilfe wird geschätzt.

Antwort

10

Die Observable Klasse verfügt über eine statische interval Methode Mitnahmen Millisekunden (wie die setInterval-Methode) als Parameter:

counter() { 
    return Observable 
     .interval(500) 
     .flatMap(() => { 
      return this.media.getCurrentPosition(); 
     }); 
} 

Und in Ihrer Komponente oder wo auch immer:

test() { 
    this.playerService.initUrl(xxxx) // This works 
    this.playerService.counter().subscribe(
     data => { 
      console.log(data); 
     } 
    ); 
} 
+0

Das funktioniert perfekt, danke! Ich musste das '.flatmap()' in '.flatMap()' ändern, damit es richtig funktioniert. – Drakee510

+0

Ah, natürlich - Tippfehler! Froh, ich könnte dir helfen! :) – rinukkusu

+2

nur eine Anmerkung für andere; 'Observable.interval' ist eine statische/Klassenmethode, Sie können es nicht auf einer Instanz von Observable aufrufen (Ich stieß auf ein Problem damit in eckigen, wenn ich versuche, ein" http.get "zu wiederholen) –

Verwandte Themen