Угловые зависимые подписки с использованием forkJoin с блоком кода для изменения данных - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть подписка, которая зависит от результата предыдущей подписки. Я использую forkJoin, поэтому мне не нужно их вкладывать:

this.service.service1().pipe(
    flatMap((res1) => this.service.service2(res1))
).subscribe((res2) => {
    // Do something with res2.
});

Проблема в том, что мне нужно изменить данные, прежде чем я вызову подписку № 2. Я хотел бы иметь возможность сделать что-то вроде этого:

this.service.service1().pipe(
    flatMap((res1) => {
      // Modify res1 data here.
      // Make 2nd Api Call
      this.service.service2(res1)
    })
).subscribe((res2) => {
    // Do something with res2.
});

Нужен ли другой оператор / синтаксис для достижения этого или я могу изменить этот подход?

1 Ответ

1 голос
/ 04 апреля 2019

Вы не возвращали наблюдаемое из вашей flatMap, верните this.service.service2 (res1);будет делать то же, что и ниже.

this.service.service1().pipe(
    map(res1 => //modify resp1 here)
    flatMap((modifiedRes1) => this.service.service2(modifiedRes1)) // note the lack of brackets, this means we are returning the observable, your function returns void.
).subscribe((res2) => {
    // Do something with res2.
});

Разница между

(res1) => this.service.service2(res1)

и

(res1) => {
  this.service.service2(res1)
}

В том, что первая функция возвращает наблюдаемую, втораявозвращает void.

(res1) => this.service.service2(res1)

и

(res1) => {
  return this.service.service2(res1)
}

эквивалентны.{} создает блок, которому требуется оператор возврата, если он используется в функции стрелки.

...