2017-06-30 6 views
0

私は、条件が成立してから購読の結果が返信されるまでの間に、コードを作成しています。放射後の購読解除の間隔

しかし、間隔があるため、サブスクリプションは続行されます。

there's観測間隔を解除する方法は、かつてここに、今、私はタイマーを使用して、退会、それハックなどのコード

Subscription subscriber = Observable.interval(0, 5, TimeUnit.MILLISECONDS) 
       .map(i -> eventHandler.getProcessedEvents()) 
       .filter(eventsProcessed -> eventsProcessed >= 10) 
       .doOnNext(eventsProcessed -> eventHandler.initProcessedEvents()) 
       .doOnNext(eventsProcessed -> logger.info(null, "Total number of events processed:" + eventsProcessed)) 
       .subscribe(t -> resumeRequest(asyncResponse)); 
     new TestSubscriber((Observer) subscriber).awaitTerminalEvent(10, TimeUnit.SECONDS); 
subscriber.unsubscribe(); 

を何か

をemmit場合、私は思っていた

悪い!

よろしく

+0

あなたの病状は? – JohnWowUs

+0

間隔がイベントの数を要求しています。そして、私たちがフィルターに合格すれば、次に進むだけです – paul

答えて

1

あなたはfirstオペレータの代わりに、フィルタの

Subscription subscriber = Observable.interval(0, 5, TimeUnit.MILLISECONDS) 
       .map(i -> eventHandler.getProcessedEvents()) 
       .first(eventsProcessed -> eventsProcessed >= 10) 
       .doOnNext(eventsProcessed -> eventHandler.initProcessedEvents()) 
       .doOnNext(eventsProcessed -> logger.info(null, "Total number of events processed:" + eventsProcessed)) 
       .subscribe(t -> resumeRequest(asyncResponse)); 

を使用することができます。これにより、条件が満たされた場合にのみ、単一の排出量を得ることができます。条件が満たされずに条件区間Observableが終了した場合、例外が発生することに注意してください。

+0

ありがとうございました! – paul

関連する問題