2017-02-18 14 views
0

Ich habe zwei Observables. Einer ist ein konstanter Strom von Ereignissen, der andere bündelt ihn mit einem Puffer.Ist es möglich, die Emission eines Observablen zu referenzieren, wenn es als Puffergrenze verwendet wird?

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) }) 

Wie kann ich die aktuelle buttonClick Innenseite der Karte Iteration zugreifen? Ich brauche das, um die Zieleigenschaft zu erhalten, die an das DOM-Ereignis des Observable angehängt ist.

Gibt es einen besseren Weg, dies zu tun?

Antwort

0

Versuchen combineLatest auf den ungepufferten bewegt:

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 }) 

Wenn Sie minimal Beispiel in einem codepen oder Pastebin einrichten, wir dies weiter verfeinern konnte.

Als eine Alternative, ich denke, dass Sie besser mit den gepufferten Bewegungen arbeiten, anstatt sie zu flatmapping. Sie würden vermeiden, jede Bewegung mit dem (gleichen) Klicken zu kombinieren, und Sie könnten immer nur die Bewegungen durchlaufen, brauchen dafür keine Flatmap:

Verwandte Themen