RxJS:如何切换以在多个行为主题源之间切换

场景:

我有一个要在其中显示数据的网格.我可能有两个(或更多)行为主题数据源.我还有一个可观察到的切换开关,该开关返回一个数字,指示我要从哪个源显示数据(即1表示源1,2表示源2等).

题:

如何合并n个来源,但仅从源中发出记录(如可观察到的切换所示)?我的网格将被订阅到结果可观察对象.触发可观察到的切换时,我希望会发出来自选定源的最新信息.

// Sources
let source1 = new BehaviorSubject([]);
let source2 = new BehaviorSubject([]);

// Toggle observable
let toggle = new BehaviorSubject(1); // default to source one

// Combined observable
let gridDataSource = ????

解决方法:

我认为switchMap可以解决问题.根据定义,其目的是在多个源之间切换.

// Sources
let sources = [
  new BehaviorSubject([]),
  new BehaviorSubject([]),
];

// Toggle observable
let toggle = new BehaviorSubject(0); // default to the first source

// Selected observable
let gridDataSource = toggle.switchMap((i) => source[i]);

如果您不能或不想使用源数组,则可以使用switchMap声明中的简单switch-case.

let gridDataSource = toggle.switchMap((i) => {
    switch(i) {
        case 1: return source1;
        case 2: return source2;
    }
});
上一篇:javascript-Rxjs订阅队列


下一篇:带有长时间运行的任务和合并状态的React useEffect挂钩