【问题标题】:RxJS - FlatMap observer called multiple timesRxJS - 多次调用 FlatMap 观察者
【发布时间】:2016-12-23 12:49:54
【问题描述】:

我正在尝试了解 flatMap 的工作原理。我知道这是处理 Observable> 的一种方式。

无论如何,我正在测试它的行为并陷入了困境:

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:https://jsbin.com/sefoyowuqe/edit?html,js,console,output

我不明白这种行为:

3 clicks on plusDom prints:
Flatmap called
Flatmap called
Flatmap called

1 点击减号打印:

done
done
done

为什么当点击 minusDom 时,它重播事件的次数与我们点击 plusDom 的次数一样多?

【问题讨论】:

    标签: rxjs


    【解决方案1】:

    flatMap 基本上将返回的流平放在原始流中。您可能正在寻找的是switchMap,当原始源通过丢弃一个。

    如果有疑问,switchMap 通常是最安全的替代方法。

    查看弹珠图进行比较:

    Flatmap 不会移除以前“扁平化”的流和:

    Switchmap 移除之前“切换”的流。

    【讨论】:

      猜你喜欢
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多