Изменение полезной нагрузки в зависимости от тела ответа - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть рабочий HTTP POST-запрос в Angular 7 с HttpClient, как показано ниже, который возвращает подробности профиля пользователя:

const request {
  firstName: this.firstName,
  lastName: this.lastName,
  city: "Dallas"
}

this.http.post("URL Path", request).subscribe(response => console.log(response);

Мой вопрос: возможно ли изменить значение полезная нагрузка на основе тела ответа? Например, если поле города возвращается пустым, измените его значение, как показано ниже:

this.http.post("URL Path", request).subscribe(response => {
     if (response.toString().includes("Null"){
         request.city = "Detroit"
         //Resubmit POST request
     }

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

В этом случае вы можете использовать оператор switchMap.

const request = {
  firstName: this.firstName,
  lastName: this.lastName,
  city: 'Dallas'
};

this.http.post(url, request).pipe(
  switchMap(response => {
    return response.toString().includes('null')
      ? this.http.post(url, {...request, city: 'Detroit'})
      : of(response);
  })
).subscribe(console.log);
1 голос
/ 25 февраля 2020

Вы можете дать iif() выстрел.

// will issue another request when iif condition is true
this.http.post('URL Path', request).pipe(
  map(response => response.toString()),
  mergeMap(response => iif(() => response.includes('null'),
    this.http.post('URL Path', { request.firstName, request.lastName, 'Detroit' }),
    of(response)
  ))  
);
...