вызвать подписку на 2-й наблюдаемой в зависимости от значения первого - PullRequest
0 голосов
/ 19 апреля 2019

Мне нужно сделать 2 вызова API, первый будет всегда выполняться и возвращать true или false.2-й должен вызывать подписку только если 1-й вернул true.

Есть ли оператор Rxjs, который я могу использовать для этого, вместо того, чтобы помещать подписку в подписку?

Я использовал switchmap при вызове 2 подписок, но в этом сценарии я всегда передавал результат с 1-го на 2-й, а 2-й всегда должен был выполняться.

Здесь я хочу избежать второго вызова, если в этом нет необходимости.

Ответы [ 3 ]

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

IMK, здесь нет оператора rxjs как такового, для этого требуется пользовательское приложение, для этого вам придется написать собственную логику. Делайте эту логику, передавая наблюдаемое, а не подписываясь несколько раз.

firstApiCall('url').pipe(
   mergeMap((data) => {  // your flattening operator
      if (data) {
        return secondApiCall('url')
      }
      return of(data)
   }
)).subscribe((data) => {
     console.log(data)
});
1 голос
/ 19 апреля 2019

См. Эту статью.

https://medium.com/javascript-everyday/rxjs-iif-operator-ternary-operator-under-the-hood-148b28e752e4

ИЛИ

https://rxjs -dev.firebaseapp.com / api / index / function / iif

RXJS «IFF» Оператор обеспечивает троичное поведение оператора.

firstCall(args).pipe(
   iif(res => res===true,secondCall(otherArgs),EMPTY),
).subscribe(doStuff);
0 голосов
/ 19 апреля 2019

Положите filter перед switchMap.

firstCall(args).pipe(
   filter(res => res === true),
   switchMap(() => secondCall(otherArgs),
).subscribe(doStuff);
...