如何从Observer的onNext方法终止源observable

时间:2016-06-29 19:05:22

标签: rx-java

我想知道从Observer的onNext方法终止源observable的最佳方法是什么。

例如,我希望当验证正常时,按钮事件只会发出一次。但是,当验证失败时,按钮事件可以再次发出。

我能想到的是下面的内容。

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事件,它就不起作用。 此外,我不确定是否会从观察者的onCompleted()

中调用onNext()

另外,我认为将验证带入Observable并不是一个好主意,因为Observer必须负责验证。 此外,在“Hot”Observable的情况下,如果observable有一些观察者,则验证可能与每个Observer不同。

1 个答案:

答案 0 :(得分:3)

您可以使用takeUntiltakeWhile等运算符来处理这类情况:

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

一般提示:阅读API documentation。大部分答案都已在那里提供。此外,在某些情况下,当您自己绘制大理石图并将​​其与引用页面上的图形进行比较时,它会有所帮助。最后,对于某些运营商,您可以a more interactive experience