2017-09-29 2 views
1
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'); 
      } 
     }) 
    }) 
} 

que le code ci-dessus, je dois retourner un observable quand appeler la fonction « inquireScmData », mais à l'intérieur de la fonction, il faut appeler une autre fonction « getScmServiceMeta » qui est également asynchrone et retour aussi un Observable, alors comment retourner le '_.get (res,' data ')' comme Observable ??? mercihttpclient angulaire retourner un Observable

+1

retour Observable.of (_. Get (res, 'données')) –

Répondre

1

rxjs vous donne une méthode statique sur Observable pour ce faire.

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

Bien que, vous aurez alors un Observable<Observable<Observable<any>>>. Est-ce que c'est ce que vous voulez, ou voulez-vous juste enchaîner les opérations "asynchrones"? Si c'est le cas, vous devriez peut-être laisser votre code tel quel, et utiliser 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'); 
     } 
    }) 
    }) 
} 
+0

Il ne devrait pas utiliser 'switchMap' dans ce cas? –