Rx-Java 出错时替换Observable
Rx-Java replace Observable in case of error
我有 2 个 URL 来获取数据,例如:\location_1\{userid}
和 \location_2\{userid}
。首先,我获得了用户列表,然后需要通过上述请求获取用户详细信息。问题是我需要调用 \location_1\{userid}
,以防出现错误(异常)从 \location_2\{userid}
获取数据。是否可以使用单个 rx 链来实现?我已经按照 here 的描述尝试了 try/catch
,但看起来能捕捉到较新的呼叫,只有 onErrorResumeNext
呼叫。
Observable<List<TestModel2>> observable = apiTest
.performTest()
.flatMapIterable(items -> items)
.flatMap(testModel -> {
try
{
return apiTest.performTest2(testModel.userId);
} catch (Exception e)
{
return apiTest.performTest3(testModel.userId);
}
}).doOnNext(testModel2 -> {Log.d("TestItemData", "doOnNext --- " + testModel2.title);})
.onErrorResumeNext(throwable ->{
Log.d("TestItemData", "onErrorResumeNext -------- ");
return Observable.empty();
})
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
使用 onErrorResumeNext
(正如您稍后在流程中所做的那样):
Observable<List<TestModel2>> observable = apiTest
.performTest()
.flatMapIterable(items -> items)
.flatMap(testModel ->
apiTest.performTest2(testModel.userId)
.onErrorResumeNext(e -> apiTest.performTest3(testModel.userId)); // <----------------
)
.doOnNext(testModel2 -> {
Log.d("TestItemData", "doOnNext --- " + testModel2.title);
})
.onErrorResumeNext(throwable ->{
Log.d("TestItemData", "onErrorResumeNext -------- ");
return Observable.empty();
})
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
我有 2 个 URL 来获取数据,例如:\location_1\{userid}
和 \location_2\{userid}
。首先,我获得了用户列表,然后需要通过上述请求获取用户详细信息。问题是我需要调用 \location_1\{userid}
,以防出现错误(异常)从 \location_2\{userid}
获取数据。是否可以使用单个 rx 链来实现?我已经按照 here 的描述尝试了 try/catch
,但看起来能捕捉到较新的呼叫,只有 onErrorResumeNext
呼叫。
Observable<List<TestModel2>> observable = apiTest
.performTest()
.flatMapIterable(items -> items)
.flatMap(testModel -> {
try
{
return apiTest.performTest2(testModel.userId);
} catch (Exception e)
{
return apiTest.performTest3(testModel.userId);
}
}).doOnNext(testModel2 -> {Log.d("TestItemData", "doOnNext --- " + testModel2.title);})
.onErrorResumeNext(throwable ->{
Log.d("TestItemData", "onErrorResumeNext -------- ");
return Observable.empty();
})
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
使用 onErrorResumeNext
(正如您稍后在流程中所做的那样):
Observable<List<TestModel2>> observable = apiTest
.performTest()
.flatMapIterable(items -> items)
.flatMap(testModel ->
apiTest.performTest2(testModel.userId)
.onErrorResumeNext(e -> apiTest.performTest3(testModel.userId)); // <----------------
)
.doOnNext(testModel2 -> {
Log.d("TestItemData", "doOnNext --- " + testModel2.title);
})
.onErrorResumeNext(throwable ->{
Log.d("TestItemData", "onErrorResumeNext -------- ");
return Observable.empty();
})
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());