/ / Jak wypisać się z Obserwatorium zwróconego przez forkJoin? - kątowe, rxjs, złącze widełkowe

Jak wypisać się z Obserwatorium zwróconego przez forkJoin? - kątowe, rxjs, złącze widełkowe

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 № 1

Tak 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.