当它被用作缓冲区边界时,是否可以引用可观察的发射?

时间:2017-02-18 09:20:19

标签: javascript rxjs observable

我有两个可观察者。一个是不断的事件流,另一个是缓冲区。

var buttonClick = Rx.Observable.fromEvent(button, 'click')
var mouseMove = Rx.Observable.fromEvent(document, 'mousemove')


var action = mouseMove
  .buffer(buttonClick)
  .flatMap(x => x)
  .map(p => {

    // I need the last buttonClick emission here

  })

var subscription = action.subscribe(x => { console.log(x) })

如何访问地图迭代中的当前buttonClick?我需要这个来获取附加到Observable的DOM事件的目标属性。

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

尝试无缓冲移动的combineLatest:

let move$ = mouseMove
  .buffer(buttonClick)
  .flatMap(x => x);

var action = Observable.combineLatest(move$, buttonClick, (move, click) => {move, click})
.map(res => { //do smt with res.move and res.click })

如果你在codepen或pastebin中设置了最小的例子,我们可以进一步改进它。

至于另一种选择,我认为你最好不要使用缓冲的动作而不是平面图。你可以避免将每个动作与(相同的)点击结合起来,你可以随时迭代这些动作,不需要平面图:

let moves$ = mouseMove.buffer(buttonClick);
let movesClick$ = Observable.zip(moves$, buttonClick, (moves, click) => {moves, click});
movesClick$.subscribe(res => { //iterate res.moves and use res.click })