Rxjs 如何将http请求可观察结果映射到新的http可观察结果,并返回外部值和内部值?

Rxjs 如何将http请求可观察结果映射到新的http可观察结果,并返回外部值和内部值?,rxjs,observable,angular-http,Rxjs,Observable,Angular Http,我想返回一个observate,它返回两个值(在数组或dict中),其中一个值是第一个的条件http请求 以中的示例为例,我想修改以下内容: import { Component } from '@angular/core'; import { Http } from '@angular/http'; import { Observable } from 'rxjs/Observable'; import 'rxjs/add/operator/mergeMap'; import 'rxjs/ad

我想返回一个observate,它返回两个值(在数组或dict中),其中一个值是第一个的条件http请求

以中的示例为例,我想修改以下内容:

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))
  }
}
从'@angular/core'导入{Component};
从'@angular/Http'导入{Http};
从“rxjs/Observable”导入{Observable};
导入'rxjs/add/operator/mergeMap';
导入'rxjs/add/operator/map';
@组成部分({
选择器:'应用程序根',
templateUrl:'app/app.component.html'
})
导出类AppComponent{
家园:可观察;
构造函数(私有http:http){}
恩戈尼尼特(){
this.homeworld=this.http.get('/api/people/1')
.map(res=>res.json())
.mergeMap(character=>this.http.get(character.homeworld))
}
}

因此,可观察对象将同时返回家庭世界和(!)角色。

Use可以使用switchMap操作符的resultSelector函数,该函数获取内部和外部可观察对象,并将它们组合在一起

以下是一个例子:

 Rx.Observable.of(1)
    .switchMap(x=>Rx.Observable.of(x+1), (outer, inner) => ({outer, inner}))
 .subscribe(x=>console.log(x))
它会打印出来

{
 inner: 2,
 outer: 1
}

Use可以使用switchMap操作符的resultSelector函数,该函数获取内部和外部可观测值,并将它们组合在一起

以下是一个例子:

 Rx.Observable.of(1)
    .switchMap(x=>Rx.Observable.of(x+1), (outer, inner) => ({outer, inner}))
 .subscribe(x=>console.log(x))
它会打印出来

{
 inner: 2,
 outer: 1
}

mergeMap
操作符内部,您可以操纵外部可观察对象(源),并通过
结果选择器将其与内部可观察对象相结合:

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));
您可以查看一个实例


有关mergeMap的更多信息可以在
mergeMap
操作符中找到。您可以操纵外部可观察对象(源),并通过
结果选择器将其与内部可观察对象相结合:

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));
您可以查看一个实例


有关mergeMap的更多信息,请参见

条件是什么?主世界值取决于获取的字符值条件是什么?主世界值取决于获取的字符值