从服务类进行嵌套的 HTTP 调用并返回 Observable

kom*_*min 3 rxjs angular angular-httpclient

我需要从 Angular 5 中的服务类进行两个相关的 HTTP 调用并返回一个 Observable,以便我的组件可以订阅它。所以在服务类函数内部:

  • 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);
    }
  )
}
Run Code Online (Sandbox Code Playgroud)

Deb*_*ahK 6

试试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)
    );
}
Run Code Online (Sandbox Code Playgroud)

然后订阅进入调用此方法的组件。

让我知道这个是否奏效。