假设我有一些过程,例如下载文件或运行大型计算。
它触发的事件可能如下所示:
{ progress: "0%" }
{ progress: "23%" }
{ progress: "78%" }
{ progress: "100%" }
{ content: "Hello. world. " }
或者也许:
{ progress: "0%" }
{ progress: "23%" }
{ error: "Access denied. " }
在每种情况下,我们都有 n
状态更新 ( T
) 后跟结果 ( S
) 或错误 ( Throwable
):
T* ( S | Throwable )
进程是 Observable<T>
的组合和Single<S>
。
有几种使用 Rx 原语对流程进行建模的方法:
- 一对
Observable<T>
和Single<S>
- 安
Observable<Either<T, S>>
- 安
Observable<Object>
与instanceof
征集选角 - 一个新的原语
Process<T, S>
与toObservable
和toSingle
方法 - 等等...
过去是如何成功建模的?
哪些方法最好?何时应该使用它们?
最佳答案
让我们立即排除 Object
加 instanceof
的情况。这是通往疯狂的必经之路。
这取决于您将如何使用 T
和 S
结果。我相信T
应该是S
的容器。
class T<S> {
public boolean isSuccess() { ... }
public boolean isStatus() { ... }
public Status getStatus() { ... }
public S getResult() { ... }
}
发出值的初始流仅包含状态值(进度量),而流中的最后一项则带有 S
值。
如果您需要S
成为Single
,那么
observable
.filter( t -> t.isSuccess() )
.last()
.map( t -> t.getResult() )
.toSingle()
就足够了。如果您需要状态报告出现在其他地方,请使用
observable.filter( t-> t.isStatus() )
这给了你你的
关于java - 我应该如何在 RxJava 中建模流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44203601/