RxJava - 主题中的错误处理

RxJava - error handling in subjects

我正在尝试在 MVVM 中实现一个 ViewModel,提供 "input stream" 的可观察对象和 "output stream" 的观察者以供视图绑定。

如果 getUser() 调用成功,下面的代码似乎可以工作,但如果失败则抛出未捕获的异常:

public class ViewModel {

    private final BehaviorSubject<String> query;
    private final BehaviorSubject<User> result;

    public ViewModel() {
        result = BehaviorSubject.create();
        query = BehaviorSubject.create();
        query.flatMap(s -> getUser(s)).subscribe(result);

        //  result = result.doOnError(e -> onError(e));    //  does not work
    }

    Observable<String> login() {
        return result.map(user -> user.getLogin());
    }

    Observable<String> blog() {
        return result.map(user -> user.getBlog());
    }

    public Observer<String> queryObserver() {
        return query;
    }

    private void onError(Throwable e) {
        Log.e(TAG, e.getMessage());
    }
}

如何在发生错误时执行 onError() 方法,而不向登录和博客 observable 推送任何内容?

doOnError() 是一个 "side-action" 运算符,它不会捕获错误。应该是这样的:

query.flatMap(s -> getUser(s)).subscribe(result::onNext, this::onError);