RXJava错误处理多个Observable

时间:2017-12-11 11:53:08

标签: rx-java2

我有一个逻辑,我必须在从其他服务获取一些数据后运行。我如何处理其中一个或全部的失败?

我希望记录错误而不是抛出异常

// 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();

这让我陷入困境。没有任何东西写入日志。

1 个答案:

答案 0 :(得分:3)

Observable.combineLatest(
        providerObservable,
        extendedProfileObservable,
        handleProviderAndProfile,
        (providerObservable, extendedProfileObservable, handleProviderAndProfile) -> operationFunction(providerObservable, extendedProfileObservable, handleProviderAndProfile)
)
        .doOnError(throwable -> logError(throwable))
        .onErrorResumeNext(throwable -> Observable.empty())
        .subscribe();

您可以尝试上面的内容。 providerObservableextendedProfileObservablehandleProviderAndProfilecombineLatest输入,(providerObservable, extendedProfileObservable, handleProviderAndProfile) -> operationFunction(providerObservable, extendedProfileObservable, handleProviderAndProfile)为lambda提供结果。这应该是对所有三个输入执行的操作。