2016-03-30 91 views
1

我是新来Observables与rx.js,我想知道我怎么可以拼合以下回调地狱:压扁嵌套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()可能已被使用把它弄平。但我不知道相当于then()Observables

回答

3

您可以使用flatMap运营商与Observable.forkJoin

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

是不是有反正我可以像链条'getdata1(),然后(getdata2)。然后(完成)'? – lbrahim

+2

是的,但是你不会在链的结尾处有'data1' ......但事实上,它与承诺是一样的;-)对于类似于'getdata1()。然后(getdata2)。然后(完成) ',只需使用:'getdata1()。flatMap(data1 => getdata2())。subscribe(...)' –