RxJS skipUntil运算符的行为不符合预期

时间:2016-12-16 22:17:43

标签: javascript rxjs

我在mousedown上设置了两个简单的事件处理Observable。

Mouseup会在应用程序中触发多个操作,具体取决于该元素是否在mousemove上移动,因此我需要在简单点击时阻止它。

我的印象是,只有在跳过500次鼠标移动并且发出一次鼠标移动之后,此代码才会开始启动鼠标,但是,即使没有单个“mousemove”被记录,也会立即记录“mouseup”,即使设置了skip()甚至更荒谬的数字。)

我错过了什么?

var mouseupObservable = Observable.fromEvent(this.element, 'mouseup');
var mouseMoveObservable = Observable.fromEvent(window, 'mousemove');
mouseupObservable
    .skipUntil(mouseMoveObservable)
    .subscribe(()=>console.error('mouseup'));
mouseMoveObservable
    .takeUntil(mouseupObservable)
    .skip(500)
    .subscribe(()=>console.error('mousemove'));

1 个答案:

答案 0 :(得分:1)

问题是你使用" raw"跳过里面的溪流,试试这个:

var mouseupObservable = Observable.fromEvent(this.element, 'mouseup');
var mouseMoveObservable = Observable.fromEvent(window, 'mousemove');

let mouseUp$ = mouseupObservable
    .skipUntil(mouseMoveObservable.skip(500));

mouseUp$.subscribe(()=>console.error('mouseup'));

let mouseMove$ = mouseMoveObservable
    .takeUntil(mouseUp$);

mouseMove$.subscribe....

但请记住," takeUntil(...)"将完成您的流...这意味着这将只适用于单个"移动点击周期" - 不确定这是不是你的意图。