forkjoin
を使用して、ネストされたオブザーバブルを回避しようとしています。現在の(ネストされた)バージョンは次のようになります。
_ 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();
});
});
}
_
最初の部分を次のように書き換えることができます。
_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())
)
_
しかし、_.subscribe
_と_data_changes
_の両方にアクセスするために_data_all
_メソッドを追加する方法がわかりません。
別の例を見ると、.subscribe(res => this.combined = {friends:res[0].friends, customer:res[1]});
のように見えるはずですが、これを自分の例に合わせる方法がわかりません。
combineLatest
の代わりに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);
});
ForkJoinで処理することもできますが、forkJoinはすべての呼び出しが終了するとデータを返し、結果を返します。
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);
});
両方を呼び出してコンソールログを確認すると、アイデアが得られます。