In my Angular2 - typescript application, I use forkJoin to return an Observable only after all concurrent HTTP calls have been made.
Problem : Subscription callback continues to run indefinitely
Here is my code:
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(); } }
What I tried (same problem):
- return Observable to Http.service, not Promise
- in my.component use .first (). subscribe () instead of just subscribing ()
- put this.mySub.unsubscribe (); at the end of ngOnInit, and not inside the subscription callback (also with setTimeout (() => ....))
source share