【发布时间】:2016-11-17 01:40:57
【问题描述】:
小故事: 我的情况是,我有 2 个具有单一目的的 Observable:
- 他们收到一些数据
- 他们返回修改后的数据
- 如果无法处理数据则抛出错误
他们各自负责处理不同类型的数据。另外,我想在处理完这两个数据后做一些事情。
我目前最好的实现如下,这些是我的 Observables:
Single<BlueData> blueObservable = Single.create(singleSubscriber -> {
if (BlueDataProcessor.isDataValid(myBlueData)) {
singleSubscriber.onSuccess(BlueDataProcessor.process(myBlueData));
}
else {
singleSubscriber.onError(new BlueDataIsInvalidThrow());
}
});
Single<RedData> redObservable = Single.create(singleSubscriber -> {
if (RedDataProcessor.isDataValid(myRedData)) {
singleSubscriber.onSuccess(RedDataProcessor.process(myRedData));
}
else {
singleSubscriber.onError(new RedDataIsInvalidThrowable());
}
});
Single<PurpleData> composedSingle = Single.zip(blueObservable, redObservable,
(blueData, redData) -> PurpleGenerator.combine(blueData, redData));
我还有以下订阅:
blueObservable.subscribe(
result -> {
saveBlueProcessStats(result);
},
throwable -> {
logError(throwable);
});
redObservable.subscribe(
result -> {
saveRedProcessStats(result);
},
throwable -> {
logError(throwable);
});
composedSingle.subscribe(
combinedResult -> {
savePurpleProcessStats(combinedResult)
},
throwable -> {
logError(throwable);
});
我的问题: 蓝色和红色数据被处理了两次,因为两个订阅都再次运行,我订阅了使用 Observable.zip() 创建的组合 observable。
如何在不运行两次操作的情况下获得这种行为?
【问题讨论】:
标签: java rx-java rx-android rx-java2