Вызов вложенного http в маршруте Resolver возвращает Observable вместо данных - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь вызвать вложенный HTTP-вызов в resol.ts. и реализован следующим образом.

app.route.js:
    { 
     path: 'result/:start_date/:end_date', 
     component: ResultComponent,
     resolve:{hnData:ResultResolver}
    }

следующий мой код разрешения

result.resolver.ts

   resolve(route: ActivatedRouteSnapshot) {
   return this.service.firstHttp()
     .pipe(
      map((data)=>{

      param['data_from_firstHttp']= data.result;
      param['checkinDate']=route.paramMap.get('start_date');
      param['checkoutDate']=route.paramMap.get('end_date');

      return this.service.searchListing(param);


   })
 )

и код компонента

result.component.ts

    { hnData : Observable}

Здесь, в компоненте, я ожидаю результата от метода службы serchListing, вместо этого я получаю наблюдаемый.

1 Ответ

0 голосов
/ 31 августа 2018
firstHttp(): Observable<data1>;
searchListing(): Observable<data2>;

// you are trying to map:
map(Observable<data1>): Observable<Observable<data2>>

Вопрос - как это сгладить?

RxJ имеют несколько способов:

1) Нужно ли обрабатывать все события из каждого внутреннего наблюдаемого?
mergeMap/concatMap - важен ли порядок событий?

2) Можем ли мы пропустить некоторые события из внутреннего Observable?
switchMap/exhaustMap - новое событие имеет более высокий приоритет?

Вы можете заменить map на mergeMap, чтобы сгладить наблюдаемые.

resolve(route: ActivatedRouteSnapshot) {
  return this.service.firstHttp()
    .pipe(
      mergeMap((data)=>{

        param['data_from_firstHttp']= data.result;
        param['checkinDate']=route.paramMap.get('start_date');
        param['checkoutDate']=route.paramMap.get('end_date');

        return this.service.searchListing(param);
  })
)
...