W mojej aplikacji Angular 2 muszę wykonać serię żądań http. Mam dwie usługi: A & B, każda z nich, A.get()
i B.get()
, która pobiera dane z interfejsu API i przechowuje je w ich usłudze. Te dwa mogą być wywoływane w tym samym czasie, jednak mam trzecie żądanie doSomething()
, które zależy od wyników A.get()
i B.get()
. Ponieważ zarówno A.get()
jak i B.get()
przechowują swoje odpowiedzi lokalnie, ich wartością powrotną jest Subskrypcja RxJ. Tak:Poczekaj na RxJs.Subscriptions, aby zakończyć przed wznowieniem
class A{
public data;
public get(){
return api.call(params).subscribe((response)=>{ this.data = response.json();})
}
}
class B{
public data;
public get(){
return api.call(params).subscribe((response)=>{ this.data = response.json();})
}
}
Moja komponent wygląda mniej więcej tak:
class MyComponent{
constructor(private a: A, private b: B){
a.get();
b.get();
this.doSomething(a.data, b.data);
}
doSomething(aData, bData){
...
}
}
Mój problem jest doSomething()
się niepowodzeniem, ponieważ a.get()
i b.get()
ukończyli jeszcze tam żądania HTTP. Potrzebuję sposobu, aby zadzwonić pod numer doSomething()
, dopóki moje pozostałe połączenia nie zostaną zakończone. Przeszukałem wszystko, ale nie miałem szczęścia z tym problemem. Dokumentacja RxJs daje kilka sposobów na scalenie Observables
, ale to nie jest to, co mam w tym przypadku.
Dzięki @ Alexander, który działał świetnie !. Jedno pytanie uzupełniające, jaka jest różnica między .do a .subscribe. Czy tracę jakąkolwiek funkcjonalność, dzwoniąc do .do na Observable? – tanspac
Nie otrzymuję tej części: if (this.data) { return Observable.of (this.data); } – user2243952