Angular 多个RXJS BehaviorSubject来触发函数调用

Angular 多个RXJS BehaviorSubject来触发函数调用,angular,rxjs,observable,reactive-programming,behaviorsubject,Angular,Rxjs,Observable,Reactive Programming,Behaviorsubject,我想运行一个计算密集型函数,它取决于3个behaviorSubjects的最新值。 有时,所有科目同时发生变化,我不想计算3次。 到目前为止,我就是这样实现它的 this.subscription = merge(behaviorSubject1$, behaviorSubject2$, behaviorSubject3$) .pipe(throttleTime(300)) //this is to avoid running the function 3 times when

我想运行一个计算密集型函数,它取决于3个behaviorSubjects的最新值。 有时,所有科目同时发生变化,我不想计算3次。 到目前为止,我就是这样实现它的

this.subscription = merge(behaviorSubject1$, behaviorSubject2$, behaviorSubject3$)
        .pipe(throttleTime(300)) //this is to avoid running the function 3 times when all subjects change simultaneously
        .subscribe(() => {
           const answer = getSolution(subject1$.getValue(), subject2$.getValue(), subject3$.getValue());

        });
我不确定这是不是最好的办法。非常感谢您提供的任何帮助

在本例中最好使用,而不要使用
merge()

this.subscription=CombineTest([behaviorSubject1$、behaviorSubject2$、behaviorSubject3$)
.管道(节流时间(300))
.订阅([value1,value2,value3])=>{
const answer=getSolution(值1、值2、值3);
});

取决于您想做什么

是否要基于最新的值进行计算? 那么您的方法很好,但是使用CombineTest,任何发射都会导致计算

this.subscription=CombineTest(behaviorSubject1$、behaviorSubject2$、behaviorSubject3$)
.管道(节流时间(300))
.订阅([o1,o2,o3])=>{
常数回答=获得溶液(o1,o2,o3);
});
你想一个一个地计算它们吗? 使用concatMap

this.subscription=CombineTest(behaviorSubject1$、behaviorSubject2$、behaviorSubject3$).pipe(
concatMap([o1,o2,o3])=>getSolution(o1,o2,o3)),//getSolution应该是可观察的。
)
.订阅(解决方案=>{
});
是否要在计算过程中忽略发射? 使用排气图

this.subscription=CombineTest(behaviorSubject1$、behaviorSubject2$、behaviorSubject3$).pipe(
排气图([o1,o2,o3])=>getSolution(o1,o2,o3)),//getSolution应该是可见的。
)
.订阅(解决方案=>{
});
是否要计算所有3个都已更改的时间? 用拉链

this.subscription=zip(behaviorSubject1$、behaviorSubject2$、behaviorSubject3$)
.订阅([o1,o2,o3])=>{
常数回答=获得溶液(o1,o2,o3);
});