Выполните вложенные HTTP-вызовы из класса обслуживания и верните наблюдаемый - PullRequest
0 голосов
/ 13 декабря 2018

Мне нужно сделать два зависимых HTTP-вызова из моего класса обслуживания в Angular 5 и вернуть Observable, чтобы мой компонент мог подписаться на него.Таким образом, внутри функции Service Class:

  • HTTP-вызов 1 вернет некоторые данные, скажем, типа string
  • . Этот string будет использоваться HTTP-вызовом 2 в качестве входных данных.
  • HTTP-вызов 2 возвращает, скажем, string[]
  • Тип возврата функции класса обслуживания будет иметь тип Observable<string[]>

Код, которыйне работает (ошибка: функция должна возвращать значение):

getData(): Observable<string[]> {
  this.httpClient.get<string>('service1/getData').subscribe(
    dataFromSvc1 => {
      return this.httpClient.get<string[]>('service2/getData/' + dataFromSvc1);
    },
    err => {
      return throwError(err);
    }
  )
}

1 Ответ

0 голосов
/ 13 декабря 2018

Попробуйте switchMap, что-то вроде этого (НЕ ПРОВЕРЕНО или синтаксис проверен!):

getData(): Observable<string[]> {
  return this.httpClient.get<string>('service1/getData')
    .pipe(
      switchMap(dataFromSvc1 => {
         return this.httpClient.get<string[]>('service2/getData/' + dataFromSvc1);
      }),
      catchError(this.someErrorHandler)
    );
}

Затем подписка идет в компоненте, вызывающем этот метод.

Дайте мне знать, если это работает.

...