根据先前的可观察性切换观察

时间:2020-08-26 10:02:00

标签: observable angular-observable

我有一个可观察到的A,它返回布尔可观察到的,并且基于可观察到的A的值,我需要调用可观察到的B或C

observableA = of(true);

observableB(): observable<string> {
}

observableC(): observable<string> {
}

function value () {
   return observableA.pipe(map(value => {
     if(value) {
      return observableB();
     } else {
      return observableC();
    }

}))
}

2 个答案:

答案 0 :(得分:1)

您可以使用 switchMap 运算符代替 map

function value () {
   return observableA.pipe(switchMap(value => {
     if(value) {
      return observableB();
     } else {
      return observableC();
    }

}))

答案 1 :(得分:-1)

为了根据真值区分调用哪个 observable。 示例如下

  • case => true => 10 的多个项目

  • case => false => 20 多个项目


import { of, Subject } from "rxjs";
import { map } from "rxjs/operators";

const observableInvokeOnTruthy$ = of(1, 2, 3, 4, 5);
const observableInvokeOnFalsy$ = of(1, 2, 3, 4, 5);
const emitValuesSubject$ = new Subject();

emitValuesSubject$.subscribe(response => {
  if (response) {
    console.log("TRUTHY VALUE:");
    observableInvokeOnTruthy$
      .pipe(
        map(item => {
          return item * 10;
        })
      )
      .subscribe(result => {
        console.log(result);
      });
  } else {
    console.log("FALSY VALUE:");
    observableInvokeOnFalsy$
      .pipe(
        map(item => {
          return item * 20;
        })
      )
      .subscribe(result => {
        console.log(result);
      });
  }
});

emitValuesSubject$.next(false);
emitValuesSubject$.next(true);