W mojej aplikacji Angular2-typecript, używam forkJoin do zwracania Observable tylko po wykonaniu wszystkich równoległych wywołań HTTP.
Kwestia: callback subskrypcji jest wykonywany w nieskończoność
Oto mój kod:
http.service
import {Http} from "@angular/http";
constructor (private _http: HTTP) {}
makeGetRequest(....) {
return this._http.get(URL)
.map (res => res.json)
.toPromise();
my.service
import {Observable} from "rxjs/Observable";
import {HttpService} from "http.service"
constructor (private _httpService: HttpService) {}
myMethod(): Observable<any[]> {
return Observable.forkJoin(
this._httpService.makeGetRequest(
URL1
),
this._httpService.makeGetRequest(
URL2
)
)
}
my.component
import MyService from "my.service";
import Subscription from "rxjs";
constructor (private _service: MyService) {}
mySub: Subscription;
ngOnInit() {
this.mySub = this._service.myMethod.subscribe(data => {
data.forEach(console.log(data));
this.mySub.unsubscribe();
}
}
Co próbowałem (ten sam problem):
- zwróć obserwowalne w Http.service zamiast na obietnicy
- w my.component użyj .first (). subscribe () zamiast po prostu subskrybować ()
- umieść this.mySub.unsubscribe (); na końcu ngOnInit zamiast wewnątrz callback subskrybcji (także z setTimeout (() => ....))
Odpowiedzi:
10 dla odpowiedzi № 1Tak jak forkJoin
odniesienie mówi, to
Uruchamia wszystkie obserwowalne sekwencje równolegle i zbiera ich ostatnie elementy.
Oznacza to, że operator otrzymuje wartości z ukończonych obserwowalnych i zwraca zakończone obserwowalne z pojedynczą wartością. Nie ma potrzeby wypisywania się z niego.