我应该如何在RxJava中建模流程?
假设我有一些过程,比如下载一个文件或者运行一个大的计算 它触发的事件可能如下所示:我应该如何在RxJava中建模流程?,java,design-patterns,rx-java,reactive-programming,rx-java2,Java,Design Patterns,Rx Java,Reactive Programming,Rx Java2,假设我有一些过程,比如下载一个文件或者运行一个大的计算 它触发的事件可能如下所示: { progress: "0%" } { progress: "23%" } { progress: "78%" } { progress: "100%" } { content: "Hello. world. " } 或许: { progress: "0%" } { progress: "23%" } { error: "Access denied. " } 在每种情况下,我们都有n个状态更新T,之后是结果
{ progress: "0%" }
{ progress: "23%" }
{ progress: "78%" }
{ progress: "100%" }
{ content: "Hello. world. " }
或许:
{ progress: "0%" }
{ progress: "23%" }
{ error: "Access denied. " }
在每种情况下,我们都有n个状态更新T,之后是结果S或错误抛出:
一个过程是可观察和单一过程的混合
有几种方法可以使用Rx原语对流程建模:
一对可观察到的、单一的
可见的
一个可观察的实例,用于调用强制转换
一种新的原始过程及其toObservable和toSingle方法
等
过去是如何成功建模的
哪些方法是最好的,什么时候应该使用 让我们马上排除对象加实例的可能性。这是通往疯狂的必经之路
这将取决于如何使用T和S结果。我认为T应该是S的容器
这就足够了。如果需要状态报告显示在其他位置,请使用
observable.filter( t-> t.isStatus() )
这将为您提供@sdgfsdh您提到的两种情况;反对意见是什么?啊,对不起,我看错了。此解决方案与上述任一解决方案相同。这并不能保证只有最后一个值是成功的。可能是一个合理的折衷方案。在Rx中,错误总是一个终端事件;如果您确实需要正常流中的错误,您可以始终执行.onErrorResumeNextt->Observable.justnew ErrorInstancet。
class T<S> {
public boolean isSuccess() { ... }
public boolean isStatus() { ... }
public Status getStatus() { ... }
public S getResult() { ... }
}
observable
.filter( t -> t.isSuccess() )
.last()
.map( t -> t.getResult() )
.toSingle()
observable.filter( t-> t.isStatus() )