2017-07-23 1 views
0

Le code suivant définit le comportement que je veux (cela fonctionne). Emmition de l'événement mousemove se produit uniquement lorsque la souris vers le bas. Je souhaite le réécrire en utilisant les opérateurs takeUntil/skipUntil. Mais cela échoue:Réinscription à takeUntil/skipUntil

let fs = [ 
    (e) => console.log(e), 
    (err) => console.log(err), 
() => { 
     console.log('done') 
     source.subscribe(...fs); 
    } 
]; 

let getDown =() => Rx.Observable.fromEvent(document,"mousedown"); 
let getUp =() => Rx.Observable.fromEvent(document,"mouseup"); 

let source = Rx.Observable.fromEvent(document,"mousemove") 
.skipUntil(getDown()) 
.takeUntil(getUp()); 

source.subscribe(
    ...fs 
) 

Comment puis-je faire cela? Merci!

Répondre

1

Ce problème est généralement résolu en projetant chaque élément du flux de déclenchement dans le flux source souhaité, puis en les aplatissant (ce qui est généralement réalisé en utilisant switchMap). Dans ce cas, vous voulez projeter des bas en mouvements jusqu'à ups. Quelque chose comme ceci:

const source = getDown().switchMap(() => Rx.Observable.fromEvent(document, "mousemove").takeUntil(getUp());