объединить две наблюдаемые во вложенных наблюдаемых в угловых? - PullRequest
0 голосов
/ 04 сентября 2018

Как объединить две наблюдаемые и вернуть новую наблюдаемую, где вторая зависит от значения первой. здесь я ожидаю новый объект, представляющий собой комбинацию нескольких значений первого и нескольких значений второго.

export interface EmpData {
  id: number;
  name: string;
}

export const EMPDATA: EmpData = {
    id : 11, name : 'xyz'
};

 export interface EmpDetails {
  id: number;
  desiganation: string;
}

export const EMPDATAILS: EmpDetails = {
    id : 11, desiganation : 'manager'
};

  getEmpData(name: string): Observable<EmpData> {
   // search based on name and return object 
   // temporary returning some data
    return of(EMPDATA);
  }

  getEmpDetails(id: number): Observable<EmpDetails> {
  // search based on id and return object 
   // temporary returning some data
    return of(EMPDATAILS);
  }

  getEmploye(name: string): Observable<any> {
    return this.getEmpData(name).pipe(
      flatMap((response) => {
        return this.getEmpDetails(response.id);
    );
  });

 this.getEmploye(xyz).subscribe(response =>
     // here I'm expecting response as below, i.e. combination of first and 
     //second observable
      //{ 
      //  id: 11,name:'XYZ', desiganation : 'manager'
      //}

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018
getEmploye(name: string): Observable<any> 
{
    return this.getEmpData(name).pipe(
      switchMap((response) => {
        return forkJoin(of(response),this.getEmpDetails(response.id);
    ),
    map(res=>{return {...res[0],...res[1]}}))
}

Вы получаете this.getEmpData. Затем верните jorkJoin объединения ответа и this.getEmpDetails. Наконец, вы отображаете результат, чтобы получить уникальный объект со свойствами обоих

ПРИМЕЧАНИЕ: если вы хотите разделить основные и подробные данные, последняя карта может выглядеть как

map(res=>{return {...res[0],detail:res[1]}}))
0 голосов
/ 04 сентября 2018

Вы можете использовать

Observable.forkJoin

Также в этом файле лучшего углового шаблонного проекта я могу показать вам, как его использовать: Ссылка на использование в проекте ngir

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...