I am trying to determine if a mousedown event persists for a period of time before mouseup .
I use timeout () in an Observable created with fromEvent() to do this, but a timeout returns both Observables.
Below, a stream subscription returns an event if mousedown starts within 1 second, but also returns 1.
var mousedown = Rx.Observable.fromEvent(target, 'mousedown'); var stream = mousedown.timeout(1000, Rx.Observable.return(1)); var sub = stream.subscribe( function (x) { console.log('Next: '+x); }, function (err) { console.log('Err: '+err); }, function () { console.log('Complete'); } );
However, this works as expected:
var source = Rx.Observable.return(42) .delay(200) .timeout(1000, Rx.Observable.return(1));
I want this code to work:
var mousedown = Rx.Observable.fromEvent(target, 'mousedown'); var mouseup = Rx.Observable.fromEvent(target, 'mouseup'); var clickhold = mousedown .flatMap(function (){ return mouseup.timeout(1000, Rx.Observable.return('hold')); }) .filter(function (x) { return x === 'hold'; }); clickhold.subscribe( function (x) { console.log('Next: '+x); }, function (err) { console.log('Err: '+err); }, function () { console.log('Complete'); } );
source share