我试图循环投掷物品并对每件物品进行额外请求。问题是请求返回错误的可能性,但我需要继续请求并收集列表中的所有数据。但看起来在onErrorResumeNext
之后没有其他数据添加到列表中。
Observable<List<TestModel2>> observable = apiTest
.performTest()
.flatMapIterable(items -> items)
.flatMap(testModel -> {
Log.d("TestItemData", "testModel.userId = " + testModel.userId);
if (testModel.userId < 5) {
return apiTest.performTest2(testModel.userId);
} else {
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());
在这个例子afret performTest()
调用我得到10个项目,我需要循环抛出并调用返回数据的performTest2()
对于我称为performTest3()
的一些id,它返回404异常。
a for result in logs我看到所有10个testModel.userId
s(从1到10)但doOnNext
只有onErrorResumeNext
个来电,所以在结果列表中我可以得到1个项目或仅限2或3项
答案 0 :(得分:2)
在doOnNext
:
onErrorResumeNext
和flatMap
Observable<List<TestModel2>> observable = apiTest
.performTest()
.flatMapIterable(items -> items)
.flatMap(testModel -> {
Log.d("TestItemData", "testModel.userId = " + testModel.userId);
Observable<TestModel2> obs;
if (testModel.userId < 5) {
obs = apiTest.performTest2(testModel.userId);
} else {
obs apiTest.performTest3(testModel.userId);
}
return obs
.doOnNext(testModel2 -> {
Log.d("TestItemData", "doOnNext --- " + testModel2.title);
})
.onErrorResumeNext(throwable ->{
Log.d("TestItemData", "onErrorResumeNext -------- ");
return Observable.empty();
});
})
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());