小编Don*_*ach的帖子

如何在RxJS中超时事件?

我试图检测mousedown事件是否在a之前保持了一段时间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');
    }
);
Run Code Online (Sandbox Code Playgroud)

但是,这可以按预期工作:

var source = Rx.Observable.return(42)
    .delay(200)
    .timeout(1000, Rx.Observable.return(1));
Run Code Online (Sandbox Code Playgroud)

我希望这段代码能够正常工作:

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';
}); …
Run Code Online (Sandbox Code Playgroud)

rxjs

2
推荐指数
1
解决办法
9565
查看次数

标签 统计

rxjs ×1