Foreta en http samtale basert på tidligere resultat

stemmer
1

Jeg trenger å gjøre to HTTP samtaler (første GET og andre POST), den andre basert på resultatet av den første.

Her er svaret fra GET:

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

Denne reaksjon vil så bli manipulert og sendt som en POST-forespørsel med følgende JSON-:

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

En Løsning:

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

Men jeg tror ikke det er den riktige måten.

MERK: Disse samtalene er ment å bli gjort i en enkelt tjeneste. Hvis det er noen rxjs operatører å gjøre det samme, vil det bli høyt verdsatt.

Publisert på 19/09/2018 klokken 12:58
kilden bruker
På andre språk...                            


2 svar

stemmer
4

Du kan bruke flatMap/mergeMapoperatøren å lage to HTTP-forespørsler, en avhengig av andre.

Som:

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 => {});
Svarte 19/09/2018 kl. 13:15
kilden bruker

stemmer
0

Jeg har forberede denne dummy tjeneste:

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

For demonstrasjon bare, jeg har bryteren http observerbar til dummy ofobserverbar.

levende prøve

Svarte 19/09/2018 kl. 13:20
kilden bruker

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