【问题标题】:Join two observables with flatMap - Angular2使用 flatMap - Angular2 加入两个可观察对象
【发布时间】:2017-05-08 13:47:24
【问题描述】:

我有两个 observables

 getProfile(nickname: string, server: string): Observable<Profile> {
    return this._http.get('http://localhost:3000/summoners?name='+ nickname + '&server=' + server )
        .map((res: Response) => res.json())
        .map((res: Object) => new Profile().from(res));
}

这个模型

export class Profile {

public id: number;
public accountId: number;
public name: string;
public summonerLevel: number;

第二个是

export class League {

public name: string;
public tier: string;
public queue: string;
public entries: LeaguePlayer[] = [];

所以,我想将这两个 observables 合二为一,我知道我需要使用 flatMap 来执行此操作,但我不知道如何执行此操作。 我试过了

getProfileWithLeagues(nickname: string, server: string): Observable<Profile> {
return this._http.get('http://localhost:3000/summoners?name='+ nickname + '&server=' + server)
  .map(response => response.json().data as Profile)
  .flatMap((profiles: Profile) => Observable.forkJoin(profiles.map((summoner: Profile) => {
      return this.getLeagues(summoner.id, server)
        .map((leagues: League) => {
          summoner.leagues.from(leagues);
          return summoner;
        });
    }))
   );
 }

但这不起作用。我做错了什么,我能做些什么来做我想做的事?谢谢大家:)

【问题讨论】:

  • 你的意思是它不起作用?了解调试时所看到的内容会有所帮助。
  • @jonnysai's 是我要开始的地方。看来您从未订阅过可观察的平面图。 forkjoin 似乎没有必要。
  • 这段代码只返回 de Profile,没有 de Leagues,我需要将这两个对象加入另一个对象

标签: angular reactjs rxjs observable


【解决方案1】:

尝试这样的事情

getProfileWithLeagues(nickname: string, server: string): Observable<Profile> {
return Observable.flatMap(data => {
            return this._http.get('http://localhost:3000/summoners?name='+ nickname + '&server=' + server)
  .map(response => response.json().data as Profile);
}).subscribe((profiles: Profile) => {
  // write your code
 } );
 }

我没看懂你的完整代码,但你可以这样开始。

【讨论】:

    猜你喜欢
    • 2017-01-29
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    相关资源
    最近更新 更多