2016-03-30 21 views
1

私はrx.jsとObservablesに新しいですし、私は次のコールバック地獄を平らにする方法を知りたいと思った:平坦化ネストされたObservables.subscribe

function getdata1 (argument) { 
    return this.http.get(url) 
     .map((res: Response) => res.json()); 
} 

function getdata2 (argument) { 
    return this.http.get(url) 
     .map((res: Response) => res.json()); 
} 

getdata1.subscribe((data1: any) => { 
    console.log("got data one. get data 2 now"); 
    getdata2.subscribe((data2: any) => { 
     console.log("got data one and two here"); 
    }); 
}); 

私は、これは約束だった場合、then()が使用されている可能性が知っていますそれを平らにする。しかしObservablesにはthen()と同等のものはありません。

答えて

3

あなたはObservable.forkJoinflatMap演算子を使用することができます。

getdata1().flatMap(data1 => { 
    return Observable.forkJoin([ 
    Observable.of(data1); 
    getdata2() 
    ]); 
}).subscribe(result => { 
    var data1 = result[0]; 
    var data2 = result[1]; 
    (...) 
}); 
+0

そこにとにかく私は '(getdata1'のようなチェーン)、その後(getdata2).then(完了)することができませんか? – lbrahim

+2

はい、チェーンの最後には 'data1'はありません...しかし、実際には約束と同じです;-) getdata1()と似ていますし、then(getdata2).then(complete) '、getdata1()。flatMap(data1 => getdata2())。subscribe(...)' –