Javascript 重新订阅takeUntil/skipUntil
下面的代码定义了我想要的行为(它可以工作)。mousemove事件仅在鼠标按下时出现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( () => {
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());