首页 > 解决方案 > 根据流值选择算子

问题描述

有一个数据源发出值 0 或 1。

如果为 0,我想通过 switchMap 操作符进行管道传输。

如果 1 我想通过排气映射操作员进行管道传输。

我怎样才能做到这一点?

https://stackblitz.com/edit/rxjs-gcvsfe

const source = from([0, 0, 0, 1, 1, 1]).pipe(
  // if value === 0
  switchMap(value => {
    return of("Operator switchMap, value: " + value);
  })
  // if value === 1
  // exhaustMap(value => {
  //   return of('Operator exhaustMap, value: ' + value)
  // })
);

source.subscribe(console.log);

标签: rxjs

解决方案


如果您想切换运营商,那么您可能需要 2 个不同的流。

如果是这种情况,那么您可以使用filter运算符并拥有类似的东西

const source = from([0, 0, 0, 1, 1, 1]);

const stream_0 = source.pipe(
  filter(val => val === 0),
  switchMap(value => {
    return of("Operator switchMap, value: " + value);
  })
)
const stream_1 = source.pipe(
  filter(val => val === 1),
  exhaustMap(value => {
     return of('Operator exhaustMap, value: ' + value)
  })
);

merge(stream_0, stream_1).subscribe(console.log);

推荐阅读