In meiner App Angular2-typescript verwende ich forkJoin, um ein Observable erst zurückzuschicken, wenn alle parallelen HTTP-Aufrufe durchgeführt wurden.Wie kann ich mich von einem Observable, das von forkJoin zurückgegeben wurde, abmelden?
Ausgabe: das Abonnement Rückruf Hier unbegrenzt
ausgeführt wird, hält mein 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();
}
}
Was ich (gleiche Ausgabe) versucht:
- Rückkehr eine beobachtbare in Http.service eher als ein Versprechen
- in my.component Verwendung .First() .subscribe() statt nur subscribe()
- put this.mySub.unsubscribe(); am Ende des ngOnInit anstatt innerhalb der Callback-subscribe (auch mit setTimeout (() => ....))
Was meinst du mit 'der Subskriptionsrückruf wird auf unbestimmte Zeit ausgeführt'? – Picci
Die Frage ergibt keinen Sinn. forkJoin verbindet die Ergebnisse von * abgeschlossenen * Observablen und sollte nicht abgemeldet werden, da es einen einzelnen Wert hat. Wenn Sie Schwierigkeiten haben, * auf unbestimmte Zeit * ausgeführt zu werden, geben Sie bitte ein [MCVE] (http://stackoverflow.com/help/mcve) an, das Ihr Problem replizieren kann. – estus
@estus Sie haben Recht. Offensichtlich geschah dies, weil das Abonnement zweimal instanziiert wurde und das Problem verursacht wurde. Fühlen Sie sich frei, die Frage zu beantworten, ich werde es akzeptieren;) – dragonmnl