根据第一个值调用第二个可观察的订阅

时间:2019-04-19 14:00:40

标签: angular rxjs rxjs5

我需要进行2次API调用,第一个将始终执行并返回true或false。如果第一个返回true,则第二个只能调用subscribe。

是否有Rxjs运算符可用于此操作,而不是将订阅置于订阅中?

当调用2个订阅时,我使用了switchmap,但是在那种情况下,我将结果从1传递给2,因此必须始终执行2。

如果不需要,我想在这里避免第二次通话。

3 个答案:

答案 0 :(得分:1)

IMK本身没有rxjs运算符,这更多是自定义应用程序的需要,您将必须为此编写自己的逻辑。通过管道化可观察对象而不是多次订阅来执行此逻辑。

firstApiCall('url').pipe(
   mergeMap((data) => {  // your flattening operator
      if (data) {
        return secondApiCall('url')
      }
      return of(data)
   }
)).subscribe((data) => {
     console.log(data)
});

答案 1 :(得分:1)

请参阅本文。

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

OR

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

RXJS “ IFF” 运算符提供了三元运算符的一种行为。

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

答案 2 :(得分:0)

filter放在switchMap之前。

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