目前我正在调查向 RxJava 的迁移,并决定我的经理(accountManager)将是一个有趣的起点。目前,Manager 有一个侦听器列表,并在帐户更新和出现问题时相应地发送更新。
private List<WeakReference<ProfileChangeListener>> mListeners = new ArrayList<>();
public interface ProfileChangeListener {
void onProfileUpdated(Account account);
void onProfileFailed(Exception e);
}
我的 Rx 解决方案涉及Subject
private SerializedSubject<Account, Account> mManagerSubject = new SerializedSubject<>(BehaviorSubject.<Account>create());
public Observable<Account> observe() {
return mManagerSubject;
}
然后当更新发生时,我调用以下方法之一:
private void onProfileUpdated(Account account) {
mManagerSubject.onNext(account);
}
private void onProfileFailed(final Exception e) {
mManagerSubject.onError(e);
}
问题
问题是一旦onError
被调用,任何通过监听的人observe
将永远不会从onNext
.
我仍然希望订阅者收到 onError 以便他们可以处理错误状态,但稍后onNext
仍然可以使用更新的帐户调用,我仍然希望订阅者处理更新的帐户。
我已经尝试过使用 的解决方案onErrorResumeNext
,onErrorReturn
onExceptionResumeNext
但它们都没有传播onError
.
TLDR:如何在调用 onError 后保持订阅者的状态,同时仍在传播 onError?