2016-06-29 6 views
0

ObserverのonNextメソッドからソースobservableを終了させる最良の方法は何ですか?ObserverのonNextメソッドからソースobservableを終了する方法

たとえば、ボタンイベントは、検証が正常になると1回だけ発生するようにします。ただし、検証が失敗すると、ボタンイベントが再び発生する可能性があります。

私は以下のことが考えられます。

Observable.... 
    .subscribe(new Subscriber(){ 
     public void onNext(T t){ 
      // do something and terminate the Observable 
      // only when the validate method return true 
      if (validate(t)){ 
       doSomething(t); 
       unsubscribe(); 
      } 
     } 
     ... 
    }); 

ただし、onCompletedイベントが必要な場合は機能しません。私はまた、オブザーバーのonNext()

からonCompleted()を呼び出すことについてはよく分からない はまた、私はオブザーバーは、検証の責任を持たなければならないので、観察可能に検証を持参することは良い考えではないだろうと思います。 また、 "Hot" Observableの場合、観測値にオブザーバがある場合、検証は各オブザーバと異なる場合があります。

答えて

2

あなたは例これらの種類のtakeUntilまたはtakeWhileのような演算子を使用することができます。

Observable.... 
    .takeUntil(t -> validate(t)) 
    .subscribe(t -> doSomething(t)); 

ヒントを一般に:API documentationをお読みください。答えのほとんどは既にそこで利用可能です。また、ある状況では、あなたが大理石の図をあなた自身で描き、それを参照ページの図面と比較するときに役立ちます。最後に、特定のオペレータにはa more interactive experienceを割り当てることができます。

+0

ありがとうございました!私はオペレータを知っていたが、私はこの考えを得ることができなかった。観測可能な情報源は1つのオブジェクトであるため、各観測者の異なる検証を処理するために、1つの観測情報を使用するようにしました。しかし、この場合、私はいくつかの観測値を作成することができます。 Rxを使うのが最も難しいのは柔軟に考えることかもしれないと思います。再度、ありがとうございます! – otal

関連する問題