在 onErrorResumeNext 之后未调用 JavaRx doOnNext
JavaRx doOnNext not called after onErrorResumeNext
我试过循环抛出物品并对每个物品进行额外的请求。问题是请求 returns 有可能出错,但我需要继续请求并收集所有数据以列出。但看起来在 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()
returns 数据
对于某些 ID,我将 performTest3()
称为 returns 404 异常。
a 对于日志中的结果我看到所有 10 testModel.userId
s(从 1 到 10)但是 doOnNext
调用直到 onErrorResumeNext
调用,所以在结果列表中我可以得到仅 1 件或 2 件或 3 件
在 flatMap
中应用 doOnNext
和 onErrorResumeNext
:
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());
我试过循环抛出物品并对每个物品进行额外的请求。问题是请求 returns 有可能出错,但我需要继续请求并收集所有数据以列出。但看起来在 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()
returns 数据
对于某些 ID,我将 performTest3()
称为 returns 404 异常。
a 对于日志中的结果我看到所有 10 testModel.userId
s(从 1 到 10)但是 doOnNext
调用直到 onErrorResumeNext
调用,所以在结果列表中我可以得到仅 1 件或 2 件或 3 件
在 flatMap
中应用 doOnNext
和 onErrorResumeNext
:
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());