rxJava2 在复杂的流中组合单个、可能、可兼容
我对新的RxJava感到非常兴奋,例如:,,,,这使您的接口类更干净,并防止在创建“Source”期间出现很多错误(例如,忘记调用Sources
Single
Maybe
Completable
onComplete()
)
但它需要大量的样板文件才能将它们组合成一个复杂的流。
例如,我们有加载和缓存数据的常见Android情况。让我们假设我们有2个来源,我们想把它结合起来:api
cache
public interface Api {
Single<Integer> loadFromNetwork();
}
public interface Cache {
Maybe<Integer> loadFromCache(); //maybe because cache might not have item.
}
让我们尝试组合它:
final Single<Integer> result = cache.loadFromCache()
.switchIfEmpty(api.loadFromNetwork());
它不会编译,因为没有重载Maybe
Maybe.switchIfEmpty(Single):Single
所以我们必须转换一切:
final Single<Integer> result = cache.loadFromCache()
.switchIfEmpty(api.loadFromNetwork().toMaybe())
.toSingle();
另一种可能的组合方式也需要 сonversion:
final Single<Integer> result = Observable.concat(
cache.loadFromCache().toObservable(),
api.loadFromNetwork().toObservable()
).firstOrError();
因此,我看不到任何方法可以在不进行许多转换的情况下使用新源,这些转换会增加代码噪声并创建大量额外的对象。
由于这样的问题,我不能使用,并继续在任何地方使用。Single
Maybe
Completable
Observable
所以我的问题是:
组合 、 、 的最佳做法是什么?
Single
Maybe
Completable
为什么这些源没有过载以使梳理更容易。
为什么这些源没有共同的祖先,并将其用作
参数和其他方法?switchIfEmpty
附言有谁知道为什么这些类没有任何共同的层次结构?
从我的角度来看,如果一些代码可以工作,例如使用它也可以正常工作 和 ?Completable
Single
Maybe