我有两个可观察者。一个是不断的事件流,另一个是缓冲区。
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事件的目标属性。
有更好的方法吗?
答案 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 })