2016-08-26 10 views
2

注意を実行していない:私は、私は5秒間画面にアイドルクリック回数を決定しようとしていますここrxjs(2.5.3)では、機能を購読

をtypescriptですを使用しています

var noClickStream = Rx.Observable.fromEvent<MouseEvent>($window.document, 'click') 
       .bufferWithTime(5000) 
       .filter(eventBundle => { 
        return eventBundle.length === 0; 
       }); 

これはこれは、コードの罰金を実行する機能を購読

var noClickStreamSubscriber = noClickStream.subscribeOnNext(() => {         
       this.showLogoutWarning = true; 
}); 

です。クリックが5秒間ないと、加入者が呼び出されます。

実際には、警告画面が表示されているときにsubscribe関数でnoClickStreamを一時停止して再開できるようにしたいと考えています。このために、最初のクリックストリームにpausable()を追加しました。今noClickStreamSubscriber機能がなくても、クリック活動の5秒後に呼び出されることは決してありません

var noClickStream = Rx.Observable.fromEvent<MouseEvent>($window.document, 'click') 
      .bufferWithTime(5000) 
      .filter(eventBundle => { 
       return eventBundle.length === 0; 
      }) 
      .pausable(); 

。 fromEventは一時停止可能な機能をサポートしていませんか?

+0

($のwindow.documentを、 'クリック') へ: Rx.Observable.fromEvent ($のwindow.document、 'クリック') –

+0

'pausableのいずれかを助けていません'うまくいくはずですが、あなたは正しく使用していません。それは観測可能な 'pauser'をとる:https://github.com/Reactive-Extensions/RxJS/blob/v.2.5.3/doc/api/core/operators/pausable.md – cartant

+0

実際に私は理由を見つけました。最初にストリームを開始しました。観察可能なものが一時停止可能に設定されている瞬間に、最初に再開する必要があります。それ以外の場合は実行されません。 Duh、私は5時間をこのように過ごしました:/ –

答えて

2

observableがpausableとして宣言されたときにsubscribe関数が実行されないのは、イベントストリームが一時停止状態で開始するためです。ストリームを機能させるには、subscribe関数が定義された後にnoClickStream.resume()を呼び出さなければなりません。 Rx.Observable.fromEvent 変更

var noClickStream = Rx.Observable.fromEvent<MouseEvent>($window.document, 'click') 
      .bufferWithTime(5000) 
      .filter(eventBundle => { 
       return eventBundle.length === 0; 
      }) 
      .pausable(); 

var noClickStreamSubscriber = noClickStream.subscribeOnNext(() => {         
       this.showLogoutWarning = true; 
}); 

noClickStream.resume(); // This has to be invoked 
関連する問題