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);
我正在尝试在 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);