2016-10-20 3 views
0

Ich habe einen Dienst, der Daten vom Server abruft. Diese Daten werden verwendet, um eine Seite zu füllen. Ich möchte die Seite alle 5 Sekunden aktualisieren. Ich versuchte mit einem sehr einfachen setInterval(), aber dann sind alle Anrufe zum Server eins nach dem anderen, ohne zu warten, bis der vorherige fertig ist. Dies ist ein Problem, wenn zum Beispiel der Server ausfällt. Ich weiß jetzt nicht, welches ist die beste Lösung, vielleicht mit Rxjs und Observables.Angular2 - Wiederholen Sie einen Anruf eines Dienstes

Antwort

0

Sie könnten etwas Einfaches wie dies tun:

Rx.Observable.interval(5000) 
    .flatMap(() => this.http.whateverYouCall) 
    .map(resp => resp.json()) 
    .subscribe((val) => //do something here with the result) 

Dies wird alle 5 Sekunden ein neuer Anruf. Wenn Sie wirklich nur 5 Sekunden nach dem vorherigen einen neuen Anruf erstellen möchten, lassen Sie es mich wissen und ich werde diesen aktualisieren.

Wenn Sie nur der nächste Anruf gestartet werden soll, wenn die vorherige Sie dies tun könnte, ist beendet:

let subject$ = new Rx.BehaviorSubject("a"); 

subject$ 
    .concatMap(() => fakeHttp().concat(Rx.Observable.empty().delay(5000))) 
    .do(() => subject$.next("a")) 
    .subscribe((val) => console.log(val)); 

jsbin: http://jsbin.com/fufuqid/13/edit?js,console Sie werden sehen, dass alle 7 Sekunden „b“ angemeldet ist. 2 Sekunden für den verspotteten Anruf und 5 Sekunden vor dem Auffrischen.

+0

ja bitte .. ich möchte den nächsten Anruf nur starten, wenn der vorherige fertig ist – ayasha