我想知道从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不同。
答案 0 :(得分:3)
您可以使用takeUntil
或takeWhile
等运算符来处理这类情况:
Observable....
.takeUntil(t -> validate(t))
.subscribe(t -> doSomething(t));
一般提示:阅读API documentation。大部分答案都已在那里提供。此外,在某些情况下,当您自己绘制大理石图并将其与引用页面上的图形进行比较时,它会有所帮助。最后,对于某些运营商,您可以a more interactive experience。