Ich versuche, verschachtelte Observablen mit forkjoin
zu vermeiden. Die aktuelle (verschachtelte) Version sieht folgendermaßen aus:
this.http.get('https://testdb1.firebaseio.com/.json').map(res => res.json()).subscribe(data_changes => {
this.http.get('https://testdb2.firebaseio.com/.json').map(res => res.json()).subscribe(data_all => {
/* Do this once resolved */
this.platform.ready().then(() => {
this.storage.set('data_changes', data_changes);
this.storage.set('data_all', data_all);
document.getElementById("chart").innerHTML = "";
this.createChart();
});
});
},
err => {
this.platform.ready().then(() => {
console.log("server error 2");
document.getElementById("chart").innerHTML = "";
this.createChart();
});
});
}
Ich kann den ersten Teil umschreiben als:
Observable.forkJoin(
this.http.get('https://testdb1.firebaseio.com/.json').map((res: Response) => res.json()),
this.http.get('https://testdb2.firebaseio.com/.json').map((res: Response) => res.json())
)
Ich bin mir jedoch nicht sicher, wie ich dann die Methode .subscribe
Hinzufügen würde, um auf data_changes
Und data_all
Zuzugreifen.
Wenn ich mir ein anderes Beispiel ansehe, sollte es ungefähr so aussehen wie .subscribe(res => this.combined = {friends:res[0].friends, customer:res[1]});
, aber ich bin mir nicht sicher, wie ich es an mein Beispiel anpassen soll.
Versuchen Sie, combineLatest
anstelle von forkJoin
zu verwenden:
Mit combineLatest
:
const combined = Observable.combineLatest(
this.http.get('https://testdb1.firebaseio.com/.json').map((res: Response) => res.json()),
this.http.get('https://testdb2.firebaseio.com/.json').map((res: Response) => res.json())
)
combined.subscribe(latestValues => {
const [ data_changes , data_all ] = latestValues;
console.log( "data_changes" , data_changes);
console.log( "data_all" , data_all);
});
Sie können dies auch mit forkJoin erledigen, aber forkJoin gibt Daten zurück, wenn alle Aufrufe abgeschlossen sind, und gibt das Ergebnis zurück.
Mit forkJoin
:
const combined = Observable.forkJoin(
this.http.get('https://testdb1.firebaseio.com/.json').map((res: Response) => res.json()),
this.http.get('https://testdb2.firebaseio.com/.json').map((res: Response) => res.json())
)
combined.subscribe(latestValues => {
const [ data_changes , data_all ] = latestValues;
console.log( "data_changes" , data_changes);
console.log( "data_all" , data_all);
});
Rufen Sie beide an und überprüfen Sie das Konsolenprotokoll.