Значение ответа http угловой карты с другим вызовом http - PullRequest
0 голосов
/ 30 января 2019

У меня есть вызов http, который выглядит следующим образом:

public getCommuneByCode(code: string): Observable<Commune> {
  return this.http.get<Commune[]>(ApiUrl);
}

И модель Коммуны выглядит следующим образом:

export interface Commune {
  code: string;
  departement: string;
  postalCode: string;
}

У меня есть еще один вызов http для получения пользовательских данных:

public getUserData(id: number): Observable<User> {
  return this.http.get<User>(ApiUrl);
}

Модель пользователя:

export interface User {
  id: number;
  name: string;
  libAddress: string;
}

Я хочу установить свойство libAddress с ответом службы getCommuneByCode следующим образом:

this.service.getUserData(id).pipe(
    map((user: User) => {
      user.libAddress = this.service.getCommuneByCode(code).pipe(
        map(commune => `${commune.postalCode} - ${commune.departement}`)
      );
      return user;
    })
  ).subscribe((userWithLibAddress) => {
    // user object with all data and libAddress property is equal to ex: 99999 - DepartementXX
  })

Но, как я и ожидал, он возвращает наблюдаемый ответ, и я не уверен, как это сделать, чтобы получить ответ.Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Вы можете использовать MergeMap.Например, вы можете попробовать что-то вроде этого -

this.service.getUserData(id).pipe(
    mergeMap( (user:User) => this.service.getCommuneByCode(code).pipe(
        map(commune => user.libAddress = `${commune.postalCode} - ${commune.departement}`)
      )
    )
  ).subscribe();
0 голосов
/ 30 января 2019

Этот должен работать.Если вам нужно объяснение, попросите его!

forkJoin(
  this.service.getUserData(id),
  this.service.getCommuneByCode(code)
).pipe(
  map(([user, commune]) => ({ ...user, libAdress: `${commune.postalCode} - ${commune.departement}`})
);

РЕДАКТИРОВАТЬ Если вам нужно сделать вызовы в последовательности:

this.service.getUserData(id).pipe(
  switchMap(user => this.service.getCommuneByCode(user.code)).pipe(
    map(commune => ({ ...user, libAdress: `${commune.postalCode} - ${commune.departement}`}))
  )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...