Fusion d'observables http à l'aide de forkjoin
J'essaie d'éviter imbriquée observables en utilisant forkjoin
. Le courant (imbriquée) version ressemble à ceci:
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();
});
});
}
Je peux réécrire la première partie:
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())
)
Mais je ne suis pas sûr de savoir comment je puis ajouter le .subscribe
méthode pour accéder à la fois data_changes
et data_all
.
En regardant un autre exemple, je sais que ça doit ressembler à quelque chose comme .subscribe(res => this.combined = {friends:res[0].friends, customer:res[1]});
mais je ne suis pas sûr de savoir comment l'adapter à mon exemple.
source d'informationauteur Martin
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser
combineLatest
au lieu deforkJoin
:Avec
combineLatest
:Vous pouvez également gérer par forkJoin , mais forkJoin renverra les données lorsque tous les appels sont fini et le résultat de retour , mais dans combineLatest Quand observables émet une valeur, émettent de la dernière valeur de chaque.
Avec
forkJoin
:Appel à la fois et vérifier le journal de la console , vous aurez idée.