Сделать один вызов HTTP на основе предыдущего результата

голоса
1

Мне нужно сделать два HTTP-вызовы (первый GET и POST второй), второй на основе результата первого.

Вот ответ от GET:

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

Этот ответ будет затем манипулировать и посылается как запрос POST со следующей JSON:

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

Одним из решений:

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

Но я не думаю, что это правильный путь.

Примечание: Эти вызовы должны быть сделаны в одном сервисе. Если есть какие - либо rxjs операторы , чтобы сделать то же самое, что было бы весьма признателен.

Задан 19/09/2018 в 12:58
источник пользователем
На других языках...                            


1 ответов

голоса
0

У меня подготовить эту фиктивную услугу:

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

Для демонстрации только, у меня есть переключатель HTTP наблюдаемого в фиктивном ofнаблюдаемых.

живой пример

Ответил 19/09/2018 d 13:20
источник пользователем

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