【问题标题】:RxJava flatmap: how to check which observable emitted an errorRxJava flatmap:如何检查哪个 observable 发出了错误
【发布时间】:2018-02-13 09:46:25
【问题描述】:

我正在使用 RxJava 的平面图来按顺序执行多个调用,其中一个调用依赖于前一个调用。我还需要知道在调用 onError 的情况下哪个 observable 发出了错误,以便正确实现我的错误处理。我如何做到这一点?

这是我的代码:

mSubscription = RxUtil.callObservable(mDataManager.createAccount(email, password))
            .flatMap(new Func1<AuthResult, Observable<Void>>() {
                @Override
                public Observable<Void> call(AuthResult authResult) {

                    User user = new User(0, null, null, name, null, username, 0, 0);

                    return RxUtil.callObservable(mDataManager.createUser(authResult.getUser().getUid(), user));
                }
            })
            .subscribe(new Subscriber<Void>() {
                @Override
                public void onCompleted() {

                }

                @Override
                public void onError(Throwable throwable) {
                    try {
                        throw (Exception) throwable;
                    } catch (FirebaseAuthUserCollisionException ucException) {
                        getPickUpView().showError(PickUpApplication.getContext().getString(R.string.error_account_exists));
                    } catch (Exception exception) {
                        getPickUpView().showError(PickUpApplication.getContext().getString(R.string.error_account_general));
                    }
                }

                @Override
                public void onNext(Void aVoid) {
                    getPickUpView().createAccountSuccessful(authResult);
                }
            });

【问题讨论】:

  • 在平面图中只需检查authResult == null authResult observable 是否抛出错误.. 否则 void observable 是否抛出错误..
  • 所以即使第一个可观察对象有错误,也总是会调用平面地图代码?该错误是否没有传播?
  • 这样想..你可以试一试,让我知道..你也可以在 authResult 中获取一个额外的字段,如字符串错误..如果 authResult == null 将错误设置为 sumthing...然后处理错误
  • 但我需要检查第一个可观察对象在失败的情况下发出哪种异常类型,所以这不起作用

标签: android rx-java


【解决方案1】:

我想错了。总结一下,我认为这是一个我需要解决的问题,而我没有。无论什么 observable 发出错误,RxJava 都会在 onError 方法中发出所有错误。一旦 onError 被调用,订阅就完成了,所以 flatmap 调用永远不会发生。

总之,我需要做的就是在同一个 onError 方法中处理来自我调用的两个可观察对象(原始对象和平面图中的对象)的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多