RxJS-多次调用FlatMap观察器

RxJS-多次调用FlatMap观察器,rxjs,Rxjs,我正在试图了解flatMap的工作原理。我理解这是一种处理可观的方法 不管怎么说,我当时正在测试它的行为,结果被这个问题困住了: let plusDom = document.querySelector('#plus'); let minusDom = document.querySelector('#minus'); let minusSource = Rx .Observable .fromEvent(minusDom, 'click

我正在试图了解flatMap的工作原理。我理解这是一种处理可观>的方法

不管怎么说,我当时正在测试它的行为,结果被这个问题困住了:

let plusDom = document.querySelector('#plus');
let minusDom = document.querySelector('#minus');

let minusSource = Rx
              .Observable
              .fromEvent(minusDom, 'click');

let plusSource = Rx.Observable
  .fromEvent(plusDom, 'click');

plusSource
  .flatMap(function(c){
    console.log('Flatmap called');
    return minusSource;
  })
  .subscribe(function(e){
  console.log('done');
})
这里是jsbin:

我不理解这种行为:

3 clicks on plusDom prints:
Flatmap called
Flatmap called
Flatmap called
1点击minusDom打印:

done
done
done

为什么单击minusDom时,它会像单击plusDom一样多次重放事件?
flatMap
基本上将返回的流平放在原始流中。您可能正在寻找的是
switchMap
,它将切换到返回的流,并在原始源通过丢弃旧流来发送数据时切换到新流

当有疑问时,switchMap通常是最安全的选择

请参见大理石图进行比较:

Flatmap不会删除以前“展平”的流,并且:

Switchmap删除以前“切换”的流