2017-09-27 2 views
0

Je suis en train d'obtenir le résultat d'une méthode qui retourne un observable pour passer dans la deuxième demanderésultat passe angular2 de requête HTTP dans mergemap requête http

this.runfirstmethod(headers).mergeMap(response => this.http[verb](url, response).map(res => res.json())) 

C'est tout ce que je fais, je pense que je Je fais quelque chose de mal parce que je ne peux pas obtenir les en-têtes de buildAzureHeaders.

service

buildAzureHeaders(headers): Observable<Headers> { 

    if (headers == null) { 
     headers = new Headers(); 
    } 

    if (JSON.parse(localStorage.getItem('azureToken')).token == null || this.azureAccessToken == null) { 
     this.Adal4Service.acquireToken("https://graph.windows.net").map(token => { 
      this.azureAccessToken = token; 
      localStorage.setItem('azureToken', token); 
      headers.append('Authorization', "Bearer " + token); 
      return Observable.of(headers); 
     }); 
    } else { 
     headers.append('Authorization', "Bearer " + localStorage.setItem('azureToken', JSON.parse(localStorage.getItem('azureToken')).token)); 
     console.log("Headers: " + headers); 
     return Observable.of(headers); 
    } 
} 

invokeRequest(verb, url, headers?, body?): Observable<any> { 
    return this.buildAzureHeaders(headers).switchMap(builtHeaders => this.http[verb](url, builtHeaders)) 
} 

composant

this.ApiAuthService.invokeRequest("get","https://graph.windows.net/aseracare.com/users?api-version=1.6").subscribe(res => { 
    console.log(res); 
    }); 
+0

Vous recherchez 'switchMap'? – hlfrmn

+0

Je le pense, je travaille encore dessus mais switchmap semble être ce dont j'ai besoin. – user1552172

Répondre

1
class MyClass { 

    firstMethod(headers: object): Observable<object> { 
     return Observable.of({qwerty: 123456}); 
    } 

    secondMethod(something: object): Observable<string> { 
     return Observable.of('OK'); 
    } 

    runner(): void { 
     const obj = {a:1}; 
     this 
      .firstMethod(obj) // object -> Observable 
      .switchMap(  // Observable -> object 
       (returnedObject: object) => this.secondMethod(returnedObject) // object -> Observable 
      ).subscribe((x: string) => console.log(x)) // logs 'OK' 
    } 
} 

SwitchMap "convertit" premier observable en une valeur qui peut être reçu par la seconde.

Pour une documentation plus précise et vérifier herehere

+0

Je reçois un indéfini de la première méthode qui fonctionne si je m'y suis abonné normalement. return Observable.of (en-têtes); cela devrait faire passer le switchmap mais je ne peux pas lire la propriété 'switchMap' de – user1552172

+0

@ user1552172 'runfirstmethod' quelle est la signature de cette méthode? – hlfrmn

+0

J'ai mis à jour tout le service et le composant, je ne peux pas obtenir la carte à feu pour retourner dans le switchmap. – user1552172