Ich versuche, Polling zu bekommen innerhalb von Angular 2 mit Observables
arbeiten. Ich weiß, dass da draußen eine Reihe anderer Antworten sind, aber ich kann sie nicht dazu bringen, für mich zu arbeiten.Http-Service-Polling mit Observablen
Ich weiß, es ist eine reine Verständnis Sache, so eine Erklärung der Antwort (was ihre tun und warum) und nicht reiner Code würde geschätzt.
test.service.ts
@Injectable()
export class EtlService {
constructor(private http: Http) { }
//Get ETL by status
get(): Observable<EtlByStatus> {
var url = 'someURL';
return this.http
.get(url)
.map(response => {
return {
headers: response.json().data.headers,
dataSet: response.json().data.data
}
});
}
Aufruf dieser Service mit einer einfachen Zeichnung wie erwartet funktioniert:
this._service
.get()
.subscribe(
res=> {
this.headers= res.headers;
this.data = res.dataSet;
});
Allerdings ist mein Problem Polling. Wie am besten ich sagen kann, sollte Polling aus erfolgen innerhalb der Component
, damit der Dienst mehr wiederverwendbar sein - die HTTP-Anforderung ist einfach und kann eine beliebige Anzahl von Arten verarbeitet werden.
test.component.ts
pollGet(timer: number = 30000): Observable<GetInterface> {
return Observable.interval(timer)
.switchMap((res) => {
this._service.get();
})
.map(res => res)
.subscribe(res => {
console.log('testing');
})
}
Die oben genannten Erträge res => void is not assignable
und type void is not assignable to type ObservableInput
. Ich habe versucht, die get-Linie in der Mitte in eine Rückkehr zu drehen, und das gibt mehr Fehler und gibt Nachrichten zurück, die subscribe
eine Funktion ist.
Als solche wie Sie Observables
für die Abfrage verwenden? Ich bin sicher, es ist mein Verständnis von map
, switchMap
und subscribe
und wie sie alle als Teil eines observable
spielen, aber ich kann es nicht herausgefunden.
Mögliche Duplikat [beobachtbare Polling?] (Http://stackoverflow.com/questions/42657380/observable-polling) – stevenvanc
Es ist ähnlich, aber die Top-Antwort Intervalle nicht verwendet. Die zweite Antwort tut das, aber es gibt keine Erklärung dafür, was der Code macht oder warum. – Doug