2016-06-29 9 views
0

Ich frage mich, was ist der beste Weg, um die beobachtbare Quelle von Observer OnNext-Methode zu beenden.Wie man die beobachtbare Quelle von Observer onNext-Methode

Zum Beispiel möchte ich, dass eine Schaltfläche Ereignis nur einmal emittiert, wenn die Validierung in Ordnung wäre. Wenn die Validierung jedoch fehlschlägt, kann ein Schaltflächenereignis erneut ausgegeben werden.

Was ich mir vorstellen kann, ist unten.

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(); 
      } 
     } 
     ... 
    }); 

Wenn ich jedoch ein onCompleted-Ereignis benötige, funktioniert es nicht. Außerdem bin ich nicht sicher, ob onCompleted() von Observer onNext()

auch nennen, denke ich, dass die Validierung zu bringen in beobachtbare keine gute Idee wäre, da Beobachter die Verantwortung für die Validierung haben muss. Darüber hinaus kann die Validierung im Fall von "heiß" beobachtbar von jedem Beobachter abweichen, wenn die beobachtbare Person einige Beobachter hat.

Antwort

2

Sie können einen Operator wie takeUntil oder takeWhile für diese Art von Fällen:

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

Hinweis allgemein: die API documentation lesen. Die meisten Antworten sind dort bereits verfügbar. In manchen Situationen hilft es auch, wenn Sie selbst ein Marmordiagramm zeichnen und es dann mit den Zeichnungen auf der entsprechenden Seite vergleichen. Schließlich können Sie a more interactive experience für bestimmte Operatoren haben.

+0

Vielen Dank für Ihre Antwort! Ich kannte den Operator, aber ich konnte diese Idee nicht verstehen. Da die Quelle des Observablen ein Objekt war, zwang ich mich, ein Observables zu verwenden, um die unterschiedliche Validierung jedes Beobachters zu handhaben. In diesem Fall kann ich jedoch einige Observables erstellen. Der schwierigste Teil der Verwendung von Rx könnte sein, flexibel zu denken, denke ich. Nochmals vielen Dank !! – otal