【发布时间】:2016-01-22 15:24:22
【问题描述】:
我正在从多个来源加载数据并缓存它们。
我所做的如下:
- 从多个来源加载数据
- 将结果缓存在内存中
我想要的是:
- 加载所有需要的数据
- 合并结果并仅在所有数据可用时传播结果
一个简单的例子如下:
mObservable1 = Observable
.concat(mObservable1Cached, mObservable1)
.first();
我怎样才能将许多缓存而不是像上面示例中那样缓存的 observables 组合在一起,只有 1 个?这是我的想法,但这行不通,因为一旦两个可观察对象中的一个具有缓存数据,它就会传播结果...
mObservable1And2 = Observable
.concat(
Observable.merge(mObservable1Cached, mObservable2Cached),
Observable.merge(mObservable1, mObservable2)
)
.first();
Observable 示例
可观察的缓存数据
mObservable1Cached = Observable.create(new Observable.OnSubscribe<List<Data>>() {
@Override
public void call(Subscriber<? super List<Data>> subscriber) {
subscriber.onNext(mData1Cached);
subscriber.onCompleted();
}
})
.subscribeOn(HandlerScheduler.from(mBackgroundHandler))
.observeOn(AndroidSchedulers.mainThread());
加载可观察的数据
mObservable1 = Observable.create(new Observable.OnSubscribe<List<Data>>() {
@Override
public void call(Subscriber<? super List<Data>> subscriber) {
subscriber.onNext(...load data...);
subscriber.onCompleted();
}
})
.doOnNext(new Action1<List<Data>>() {
@Override
public void call(List<Data> data) {
mData1Cached = data;
}
})
.subscribeOn(HandlerScheduler.from(mBackgroundHandler))
.observeOn(AndroidSchedulers.mainThread());
【问题讨论】:
-
Zip 运算符对您有帮助吗?这只会在所有被压缩的 Observable 发射后发射?
标签: java android merge concat rx-java