我要完成一系列任务,如果其中任何一个抛出异常,则希望继续执行下一个任务。
但是通过这种实现,如果第一次REST调用失败,它会在订阅者中抛出onError。
想知道什么是最好的运算符,或者我需要调用其他函数来使其在异常时恢复。
private void logout() {
// Observable from Retrofit to make logout service call
requestLogout()
.doOnNext(o -> {
clearNotifications();
})
.doOnNext(o -> {
unregisterGcm();
})
.doOnNext(o -> {
clearLocalData();
})
.doOnNext(o -> {
// clear all jobs
mJobManager.clear();
})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Object>() {
@Override
public void onCompleted() {
// no op
}
@Override
public void onError(Throwable e) {
mView.navigateToLogin();
}
@Override
public void onNext(Object o) {
mView.navigateToLogin();
}
});
}
答案 0 :(得分:0)
如果您只想重新订阅使用Observable.retry()
:
.observeOn(AndroidSchedulers.mainThread())
.retry().subscribe(new Subscriber<Object>() {
// rest of code
答案 1 :(得分:0)
所以我找到了执行所有Observable的方法,即使其中一个有错误。但这并不能保持秩序。
我仍然在寻找保留订单的方法,如果出现错误,它应该继续下一个可观察的。
Observable.mergeDelayError(requestLogout(),
clearNotifications(),
unregisterGcm(),
clearLocalData(),
clearJobs())
.first()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Object>() {
@Override
public void onCompleted() {
// no op
}
@Override
public void onError(Throwable e) {
mView.navigateToLogin();
}
@Override
public void onNext(Object o) {
mView.navigateToLogin();
}
}
);