Maak een http oproep op basis van eerdere resultaat

stemmen
1

Ik moet twee HTTP oproepen (eerste GET en tweede POST), de tweede te maken op basis van het resultaat van de eerste.

Hier is het antwoord van de GET:

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

Deze reactie zal dan worden gemanipuleerd en verzonden als een POST-aanvraag met de volgende JSON:

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

Een oplossing:

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

Maar ik denk niet dat het de juiste manier.

LET OP: Deze gesprekken worden verondersteld te worden gemaakt in een enkele dienst. Als er sprake is van rxjs operators om hetzelfde te doen, zou het zeer op prijs gesteld.

De vraag is gesteld op 19/09/2018 om 12:58
bron van user
In andere talen...                            


2 antwoorden

stemmen
4

U kunt het gebruiken flatMap/mergeMapoperator twee HTTP-verzoeken te maken, één afhankelijk van de andere.

Net zoals:

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 => {});
antwoordde op 19/09/2018 om 13:15
bron van user

stemmen
0

Ik heb voorbereiding van deze dummy service:

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();

Voor de demonstratie alleen, ik heb switch http waarneembaar dummy ofwaarneembaar.

live-monster

antwoordde op 19/09/2018 om 13:20
bron van user

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