【问题标题】:angular httpclient return an Observable角度 httpclient 返回一个 Observable
【发布时间】:2017-09-29 23:31:41
【问题描述】:
private getScmServiceMeta(serviceId: string): Observable<any> {
    let service = this.getServiceItem(serviceId);

    if (service) {
        return this.httpClient.get(serviceUri).map((res: Response) => {
                return _.get(res, 'data.serviceinfo');
            })
    } else {
        return Observable.throw('backend server error');
    }
}

public inquireScmData(serviceId: string, params: object, templateId: string): Observable<any> {
    return this.getScmServiceMeta(serviceId).map((serviceInfo: any) => {

        let uri = serviceInfo.routeTemplate;

        // How to return the _.get(res, 'data') as an Observable ???
        return this.httpClient.get(uri).map((res: Response) => {
            if (_.startsWith(_.get(res, 'status.code'), '200')) {
                return _.get(res, 'data');
            } else {
                throw ('status code error');
            }
        })
    })
}

如上代码,调用inquireScmData函数时需要返回一个observable,但在函数内部,需要调用另一个异步函数getScmServiceMeta,也返回一个Observable,那么如何返回'_.get(res, 'data')' 作为 Observable ??? 谢谢

【问题讨论】:

  • return Observable.of(_.get(res, 'data') )

标签: angular rxjs


【解决方案1】:

rxjs 在 Observable 上为您提供了一个静态方法来执行此操作。

Observable.of( _.get(res, 'data') );

不过,您将拥有一个Observable&lt;Observable&lt;Observable&lt;any&gt;&gt;&gt;。这是您的意图,还是您只想链接“异步”操作。如果是这样,您可能应该保留您的代码,并使用mergeMap

public inquireScmData(serviceId: string, params: object, templateId: string): Observable<any> {
  return this.getScmServiceMeta(serviceId).mergMap((serviceInfo: any) => {

    let uri = serviceInfo.routeTemplate;

    return this.httpClient.get(uri).map((res: Response) => {
      if (_.startsWith(_.get(res, 'status.code'), '200')) {
        return _.get(res, 'data');
      } else {
        throw ('status code error');
      }
    })
  })
}

【讨论】:

  • 在这种情况下他不应该使用switchMap吗?
猜你喜欢
  • 2018-06-19
  • 2018-02-20
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多