In meiner Angular 2 App muss ich eine Reihe von HTTP-Anfrage machen. Ich habe zwei Dienste, A & B, die jede Anfrage machen, A.get()
und B.get()
, die Daten von der API erhält und sie in ihrem Dienst speichert. Diese zwei können gleichzeitig aufgerufen werden, aber ich habe eine dritte Anfrage doSomething()
, die von den Ergebnissen A.get()
und B.get()
abhängt. Da sowohl A.get()
als auch B.get()
ihre Antworten lokal speichern, endet ihr Rückgabewert mit dem RxJs-Abonnement. Wie so:Warte auf RxJs.Subscriptions zu beenden, bevor wieder
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();})
}
}
Meine Komponente etwa wie folgt aussieht:
class MyComponent{
constructor(private a: A, private b: B){
a.get();
b.get();
this.doSomething(a.data, b.data);
}
doSomething(aData, bData){
...
}
}
Mein Problem ist doSomething()
versagt, weil a.get()
und b.get()
haben noch dort HTTP-Anforderung abgeschlossen. Ich brauche einen Weg, um doSomething()
zu halten, bis meine anderen Anrufe abgeschlossen sind. Ich habe überall gesucht, aber ich hatte kein Glück mit diesem Problem. RxJs Dokumentation gibt ein paar Möglichkeiten, wie Sie Observables
zusammenführen können, aber das ist nicht, was ich in diesem Fall habe.
Dank aufgerufen @ Alexander, das hat super funktioniert! Eine Folgefrage, was ist der Unterschied zwischen .do und .subscribe. Verliere ich irgendeine Funktionalität, indem ich .do auf dem Observable anrufe? – tanspac
Ich bekomme diesen Teil nicht: if (this.data) { return Observable.of (this.data); } – user2243952