I'm trying to avoid nested observables by using forkjoin. The current (nested) version looks like this:
  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();       });     });   }   I can rewrite the first part as:
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()) )   But i'm not sure how I would then add the .subscribe method to access both data_changes and data_all.
Looking at another example, I know it should look something like .subscribe(res => this.combined = {friends:res[0].friends, customer:res[1]});, but i'm not sure how to adapt this to my example. 
The RxJS forkJoin() operator is a join operator that accepts an Array of ObservableInput or a dictionary Object of ObservableInput and returns an Observableand then waits for the Observables to complete and then combine last values they emitted.
forkJoin Improvements Moreover, there is one deprecation — forkJoin(a, b, c, d) should no longer be used; Instead, pass an array such as forkJoin([a, b, c, d]) .
concat() which will handle each observable in sequence.
forkJoin is an operator that takes any number of input observables which can be passed either as an array or a dictionary of input observables. If no input observables are provided (e.g. an empty array is passed), then the resulting stream will complete immediately.
Try to use combineLatest instead of forkJoin :
With 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); });   You can also handle it by forkJoin , but forkJoin will return data when all calls are finished and return result , but in combineLatest When any observable emits a value, emit the latest value from each.
With 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); });   Call both and check the console log , you will get idea.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With