Javascript 取消BounceTime()并等待事件

Javascript 取消BounceTime()并等待事件,javascript,rxjs,reactive-programming,rxjs5,Javascript,Rxjs,Reactive Programming,Rxjs5,我想在RxJS中完成一些用英语表达的东西,如: this.documentClick$ = Observable.fromEvent(document.querySelector('body'), 'mousemove') .merge(Observable.fromEvent(document.querySelector('body'), 'click')); 等待一个事件从一个流中引发,执行一些功能,然后等待该流的5秒钟静默,然后执行另一个功能 我已经尝试过几次了。我要订阅的流如下

我想在RxJS中完成一些用英语表达的东西,如:

this.documentClick$ = Observable.fromEvent(document.querySelector('body'), 'mousemove')
    .merge(Observable.fromEvent(document.querySelector('body'), 'click'));
等待一个事件从一个流中引发,执行一些功能,然后等待该流的5秒钟静默,然后执行另一个功能

我已经尝试过几次了。我要订阅的流如下所示:

this.documentClick$ = Observable.fromEvent(document.querySelector('body'), 'mousemove')
    .merge(Observable.fromEvent(document.querySelector('body'), 'click'));
目前的两个竞争者完成了这项工作,但每个人都有自己的缺点:

this.documentClick$
    .subscribe( () => {
        this.toolbarsVisible = 'visible';
    });

this.documentClick$
    .debounceTime(5000)
    .subscribe( () => {
        this.toolbarsVisible = 'hidden';
    });

“最正确”的做法是什么?我认为使用主题是最好的,但我无法将
Observable.fromEvent()
引入主题


(我想我真正想问的问题是:如何从可观察对象创建主体?

您不能在主体中转换可观察对象(只能使用
asObservable()
操作符从主体转换为可观察对象)

显然,我不知道您想要使用Subject的用例是什么,但是您可以从
Observable.fromEvent()
中获取Observable并订阅Subject。然后,这个主题将重新提交来自可观察对象的所有值,同时仍然是一个可以调用
next()
或任何东西的主题

一个简单的演示演示了这种情况:

let subject = new Subject();
subject.subscribe(val => console.log('subject', val));

Observable.interval(250)
    .subscribe(subject);

Observable.interval(1000)
    .subscribe(val => subject.next('Hello ' + val));
见现场演示:

这将输出例如:

subject 0
subject 1
subject 2
subject Hello 0
subject 3
subject 4
subject 5
subject 6
subject Hello 1
subject 7
subject 8