RxJS 管道过滤成 2 个以上分支

Vla*_*tea 5 javascript rxjs rxjs-pipeable-operators rxjs6

假设我们有一个主题,它可以返回一组给定的值,所有这些值可能需要不同的方法来处理。我们可以争论是否应该如此,但这并不是我调查的重点。

所以......为了处理这个问题,我们的代码可能看起来像这样:

var sub = new Subject(); 

sub.subscribe( 
    data => {
        if (caseA) {
            // do something
        }
        if (caseB) {
            // do something else
        }
     });
Run Code Online (Sandbox Code Playgroud)

这一切都很棒,一切都很棒……但我想知道是否有一些操作符可以链接起来以使其更加rx-ish?想到了过滤器,但是链接 caseA 和 caseB 只会使其不起作用(显然),因为它最终会过滤掉两者。

所以,我的问题归结为:是否有可能有任何类似于下面的伪代码的东西?您知道有任何操作员可以像这样工作吗?

var sub = new Subject(); 

sub.pipe(
    magicOperator(//handles caseA),
    magicOperator(//handles caseB),
)
subscribe( 
    data => {
        // handles common thread
     });
Run Code Online (Sandbox Code Playgroud)

Fan*_*ung 2

只需创建一个具有大小写切换功能的对象即可使代码更漂亮

const handler={
  case1:()=>..handle case1,
  case2:()=>...handle case2
}

sub.map(result=>handler[result])

// experimental switchCase operator 
const switchCase=handlers=>(source)=>source.map(val=>handlers[val]())

// usage
sub.pipe(switchCase({
   case1:....,
   case2:....
}))
Run Code Online (Sandbox Code Playgroud)