2016-09-05 9 views
4

私はrxjavaで新しく、私は50秒間に2秒ごとにポーリングタスクを実行したい、タスクでいくつかの条件が満たされた場合に終了するかもしれないが、Observable.intervalを使用しようとしている例外をスローする以外は終了する方法はありません。私の目標を達成するために他の演算子がありますか? BTWこの機能は、観察可能なオブジェクトを提供するためのAPIとして機能するので、私はサブスクライバを制御することができません。観測可能からの間隔を停止する方法

Observable.interval(timeout, interval, TimeUnit.SECONDS) 
.flatmap(task - > task) 

答えて

10

私はObservable.takeUntil(stopPredicate)Observable.takeWhile(predicate)はあなたを助けることができると思います。ここでは

Observable.interval(timeout, interval, TimeUnit.SECONDS) 
.takeWhile(val -> val < 42) 

、観察は次のようにあなたがtakeUntilを使用してObservable.intervalを停止することができ42th試み

+0

ありがとうございます!それは私が望むものです。 – iammini

0

に終了します:

Observable.interval(0, 1, TimeUnit.SECONDS) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .takeUntil(new Predicate<Long>() { 
       @Override 
       public boolean test(Long aLong) throws Exception { 
        return aLong == 10; 
       } 
      }) 
      .subscribe(new Consumer<Long>() { 
       @Override 
       public void accept(Long aLong) throws Exception { 
        Log.d(TAG, "Tick: " + aLong); 
       } 
      }); 

この例では、 10秒後に観察可能な状態になります。

関連する問題