Оператор flatMap()
позволяет превратить одну наблюдаемую в другую наблюдаемую. У вас есть вложенная цепочка наблюдателей внутри вашей apply()
, которая не является частью цепочки наблюдателей, поэтому она будет пустой, потому что она еще не завершена.
Чтобы исправить это, когда файл существует, верните наблюдаемое.
observable
.flatMap(new Function<ClassOfListItem, ObservableSource<RequestResult>>() {
@Override
public ObservableSource<RequestResult> apply(ClassOfListItem listItem) throws Exception {
RequestResult requestResult = new RequestResult();
if (fileExists(listItem.url)) {
return restAPI.enroll(listItem.url)
.subscribeOn(Schedulers.io());
}
return Observable.error( new CustomException("file not found") );
}
}
.toList()
.observerOn(AndroidScheduler.mainThread())
.subscribe(new DisposableSingleObserver<List<RequestResult>>() {
@Override
public void onError(Throwable e) {
Log.d("onError", e.getMessage());
}
@Override
public void onSuccess(List<RequestResult> requestResults) {
// parse results
}
}
Если вам нужно зафиксировать в списке как ошибки, так и успехи, то вы можете добавить оператор map()
для переноса RequestResult
вокруг ответа и onErrorResumeNext()
для переноса RequestResult
вокруг ошибки перед оператором toList()
.