我有一个逻辑,我必须在从其他服务获取一些数据后运行。我如何处理其中一个或全部的失败?
我希望记录错误而不是抛出异常
// Step 1
Observable<Provider> providerObservable =
providerService
.getProvider(data)
.toObservable()
.onErrorResumeNext(e -> Observable.error(e.getCause()));
// Step 2
Single<Profile> profileObservable =
profileService
.getProfile(data)
.onErrorResumeNext(e -> Single.error(e.getCause()));
Observable<ExtendedProfile> extendedProfileObservable =
profileObservable
.flatMap(this::getExtendedProfile)
.toObservable()
.onErrorResumeNext(e -> Observable.error(e.getCause()));
// Combine
Observable.combineLatest(providerObservable, extendedProfileObservable, this::handleProviderAndProfile)
.doOnError(throwable -> logError(throwable))
.onErrorResumeNext(throwable -> Observable.empty())
.subscribe();
这让我陷入困境。没有任何东西写入日志。
答案 0 :(得分:3)
Observable.combineLatest(
providerObservable,
extendedProfileObservable,
handleProviderAndProfile,
(providerObservable, extendedProfileObservable, handleProviderAndProfile) -> operationFunction(providerObservable, extendedProfileObservable, handleProviderAndProfile)
)
.doOnError(throwable -> logError(throwable))
.onErrorResumeNext(throwable -> Observable.empty())
.subscribe();
您可以尝试上面的内容。 providerObservable
,extendedProfileObservable
和handleProviderAndProfile
为combineLatest
输入,(providerObservable, extendedProfileObservable, handleProviderAndProfile) -> operationFunction(providerObservable, extendedProfileObservable, handleProviderAndProfile)
为lambda提供结果。这应该是对所有三个输入执行的操作。