【发布时间】:2014-06-01 23:06:21
【问题描述】:
我正在尝试检测mousedown 事件是否在mouseup 之前举行了一段时间。
我在使用fromEvent() 创建的 Observable 上使用 timeout() 来执行此操作,但超时会返回两个 Observable。
下面,如果mousedown在1秒内被触发,订阅流返回事件,但它也返回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');
}
);
但是,这按预期工作:
var source = Rx.Observable.return(42)
.delay(200)
.timeout(1000, Rx.Observable.return(1));
我希望这段代码可以工作:
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');
}
);
【问题讨论】:
标签: rxjs