Faire un appel http basé sur précédente résultat

voix
1

Je dois faire deux appels HTTP (GET et première seconde POST), la deuxième base du résultat de la première.

Voici la réponse de l'EEG:

{
    weekNbr: 34-2017,
    startDate: 2017-09-16,
    endDate: 2017-09-22
}

Cette réponse sera ensuite manipulé et envoyé comme une requête POST avec le JSON suivant:

{
    weekNbr: 34, (as received above)
    year: 2017 (as received above)
}

Une solution:

http.get(url1).pipe(
    map(do your maipulation)
).subscribe(
    (newlyCreatedObject) => {
        return http.post(url2,newlyCreatedObject);
    }
);

Mais je ne pense pas que ce soit la bonne façon.

NOTE: Ces appels sont censés être fait dans un seul service. S'il y a des opérateurs de rxjs à faire la même chose, ce serait très apprécié.

Créé 19/09/2018 à 12:58
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
4

Vous pouvez utiliser l' flatMap/mergeMapopérateur d'effectuer deux requêtes HTTP, l' un en fonction de l'autre.

Comme:

http.get(data).flatMap(res => {
    // res is response of Get
    // manipulate the data and passed in post call
    return http.post(data);
})
.map(res => {})
.catch(e => {});
Créé 19/09/2018 à 13:15
source utilisateur

voix
0

J'ai préparer ce service fictif:

import {of, Observable} from 'rxjs';
import {flatMap} from 'rxjs/operators';
/**
 * Dummy get observable.
 */
export class MyService {

  getInformation$(): Observable<{foo:string}> {
    return of({foo:'bar'});
  }

  postInformation$(params:{foo:string}): Observable<any> {
    return of({
      fooUpperCase: params.foo.toUpperCase() // Stupid transformation for demonstration only
    });
  }

  main() {
    this.getInformation$().pipe(
      flatMap(data => this.postInformation$(data)) // receive each next and return new observable. 
    ).subscribe(console.log);
  }
}

new MyService().main();

Pour la démonstration que, j'ai commutateur http observable au simulacre ofobservable.

échantillon en direct

Créé 19/09/2018 à 13:20
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more