2017-08-03 63 views
0

我想返回一個observable,它返回兩個值(在一個數組或字典中),其中一個值是第一個值的條件http請求。如何將http請求可觀察結果映射到新的http observable並返回外部值和內部值?

以從https://coryrylan.com/blog/angular-multiple-http-requests-with-rxjs的例子,我想修改如下:

import { Component } from '@angular/core'; 
import { Http } from '@angular/http'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/mergeMap'; 
import 'rxjs/add/operator/map'; 

@Component({ 
    selector: 'app-root', 
    templateUrl: 'app/app.component.html' 
}) 
export class AppComponent { 
    homeworld: Observable<{}>; 
    constructor(private http: Http) { } 

    ngOnInit() { 
    this.homeworld = this.http.get('/api/people/1') 
     .map(res => res.json()) 
     .mergeMap(character => this.http.get(character.homeworld)) 
    } 
} 

因此,觀察到的將返回兩個家園和字符(!)。

+0

會是什麼狀況? –

+0

家庭世界的價值取決於取得的字符值 – amit

回答

1

裏面的mergeMap操作符,你可以操縱外觀察到的(源),並與結合起來內部通過一個resultSelector

const example = Rx.Observable.of('Hello') 
    .mergeMap(v => Rx.Observable.of(v +" Rxjs"),(valueFromSource,valueFromInner)=>{ 
     return `Source: ${valueFromSource}, Inner: ${valueFromInner}`; 
}); 
//output: "Source: Hello, Inner: Hello Rxjs" 
const subscribe = example.subscribe(val => console.log(val)); 

您可以檢查一個活生生的例子here

更多有關mergeMap可以發現here