用rxjs实现可拖动组件

用rxjs实现可拖动组件,rxjs,rxjs6,Rxjs,Rxjs6,我将可拖动组件的实现从rxjs5移动到了6。在测试时,我注意到onDragEnd函数不是偶尔调用的。这可能是什么原因?代码如下: fromEvent(this.ref,"mousedown") .pipe( filter(this.inside), debounceTime(300), tap((event) => { this.onDragStart(even

我将可拖动组件的实现从rxjs5移动到了6。在测试时,我注意到onDragEnd函数不是偶尔调用的。这可能是什么原因?代码如下:

    fromEvent(this.ref,"mousedown")
        .pipe(
            filter(this.inside),
            debounceTime(300),
            tap((event) => { 
                this.onDragStart(event); 
            }),
            exhaustMap(() => 
                fromEvent(document.body,"mousemove")
                .pipe(
                    takeUntil(
                        fromEvent(document.body,"mouseup")
                        .pipe(tap(this.onDragEnd)) // <--- my problem
                    )
                ) 
            )
        ) 
        .subscribe( 
            (event) => { 
                this.onDragMove(event);
            },
            this.onError
        )
fromEvent(此.ref“mousedown”)
.烟斗(
过滤器(该内部),
去BounceTime(300),
点击((事件)=>{
这是一个启动(事件);
}),
排气图(()=>
fromEvent(document.body,“mousemove”)
.烟斗(
武田(
fromEvent(document.body,“mouseup”)
.pipe(tap(this.onDragEnd))/{
这是一件大事;
},
这是一个错误
)

编辑:为了澄清我的预期,mousedown事件应该映射到可观察的(假设我正确理解了defaustmap)在内部可观测完成之前,不允许外部可观测再次发射。我不明白的是,为什么在20-30次onDragEnd中的一次没有发射,从文档中可以观测到,所以我的直觉告诉我鼠标在这种情况下是不可避免的,我错了吗?如果你有一些想法,这个实现可能有什么问题,请让我知道,谢谢!

你不能在订阅调用中调用完成处理程序中的
onDragEnd
吗?感谢响应Oliver,我考虑过这个问题,但我需要获得最后一个事件值,而且onComplete似乎不接收任何参数,我可能可以在一些外部变量中保留最后一个事件数据,但我想让它成为一个变量有点“更动态”而不需要这样做是有意义的。我假设
this.onDragMove
存储值。一个可能的问题是,您的
mouseup
事件处理程序附加到
文档.body
。body可能仅覆盖浏览器窗口的一部分,因此当您在实际body之外释放按钮时,您无法捕获事件。感谢您的建议,我们将检查这种可能性