rxjs,我如何将多个主体合并到一个可观察对象中,但用不同的方法处理它们

rxjs,我如何将多个主体合并到一个可观察对象中,但用不同的方法处理它们,rxjs,rxjs5,Rxjs,Rxjs5,我有三个主题。像这样: const s1$=新主题() const s2$=新主题() const s3$=新主题() 这三个主题调用next()发出相同的值:constfruit={id:1,name:apple} 我有三种方法来处理受试者调用下一个(水果)方法的逻辑一对一对应关系 method1(){ //在s1$.next(水果)时调用 } 方法2(){ //当s2$.next(水果)时调用 } 方法3(){ //当s3$.next(水果)时调用 } 我想实现这一点: //这里可能不可

我有三个
主题
。像这样:

const s1$=新主题()
const s2$=新主题()
const s3$=新主题()
这三个主题调用
next()
发出相同的值:
constfruit={id:1,name:apple}

我有三种方法来处理
受试者
调用
下一个(水果)
方法的逻辑一对一对应关系

method1(){
//在s1$.next(水果)时调用
}
方法2(){
//当s2$.next(水果)时调用
}
方法3(){
//当s3$.next(水果)时调用
}
我想实现这一点:

//这里可能不可见。合并,这只是一个想法。
可观察的合并(
s1元,
s2$,
s3$
)
.doSomeOperator()
.订阅(val=>{
//val可以是s1$emit、s2$emit或s3$emit
//但瓦尔是一样的,水果。
//做一些映射,比如s1->method1,s2->method2,s3->method3,这样我就可以省略if…else语句。
const method=this.method1 | this.method2 | this.method3。
方法();
})

我如何实现这一点,谢谢。

使用map操作符添加区分源

导出类AppComponent{
s1(val){
console.log('s1',val);
}
s2(val){
console.log('s2',val);
}
构造函数(){
常量s1=新主题();
const s2=新主题();
常量m1=s1.map(val=>({val,源代码:'s1'}));
常量m2=s2.map(val=>({val,源代码:'s2'}));
可观测合并(m1,m2)
.subscribe({val,source})=>{
该[来源](val);
});
s1.下一个(“苹果”);
s2.下一步(“苹果”);
}
}

如果没有优先级顺序(考虑到无论哪个
主题发出,您都希望调用该方法),我建议如下:

//这里可能不可见。合并,这只是一个想法。
可观察的合并(
s1$.map((val)=>({fn:(arg)=>this.method1(arg),val})),
s2$.map((val)=>({fn:(arg)=>this.method2(arg),val})),
s3$.map((val)=>({fn:(arg)=>this.method3(arg),val}))
)
.subscribe({fn,val}=>{
fn(arg)
});

您还可以在
map
操作符中执行它们。但是,这取决于你在这里想要实现什么

也许你需要的是
do
操作符()我不喜欢上面的内容。这种字符串参数使Typescript提供的所有类型检查无效。至少直接返回方法,然后