Javascript 重新订阅takeUntil/skipUntil

Javascript 重新订阅takeUntil/skipUntil,javascript,rxjs,reactive-programming,Javascript,Rxjs,Reactive Programming,下面的代码定义了我想要的行为(它可以工作)。mousemove事件仅在鼠标按下时出现 Rx.Observable.fromEvent(window,"mouseup") .subscribe( () => { if(subscription) subscription.dispose(); } ) Rx.Observable.fromEvent(window,"mousedown") .subscribe( () => {

下面的代码定义了我想要的行为(它可以工作)。mousemove事件仅在鼠标按下时出现

Rx.Observable.fromEvent(window,"mouseup")
.subscribe( 
  () => {
      if(subscription)
         subscription.dispose();
  }
) 

Rx.Observable.fromEvent(window,"mousedown")
.subscribe(
  () => {
      subscription = Rx.Observable.fromEvent(window,"mousemove")
                     .subscribe(
                       (event) => console.log(event)
                     )
  }
) 
我想用takeUntil/skipUntil操作符重写它。但这失败了:

let fs =  [
  (e) => console.log(e),
  (err) => console.log(err),
  () => {
      console.log('done')  
      source.subscribe(...fs);
  }
 ];

let getDown = () => Rx.Observable.fromEvent(document,"mousedown");
let getUp = () => Rx.Observable.fromEvent(document,"mouseup");

let source = Rx.Observable.fromEvent(document,"mousemove")
.skipUntil(getDown())
.takeUntil(getUp());

source.subscribe(
   ...fs
)

我怎么能做到?谢谢

这个问题通常是通过将触发流的每个元素投影到所需的源流中,然后进行平坦化来解决的(这通常是通过使用
开关映射来实现的)。在这种情况下,您希望将向下投影到移动中,直到向上投影。大概是这样的:

const source = getDown().switchMap(() => Rx.Observable.fromEvent(document, "mousemove").takeUntil(getUp());