我有一个Observable
,如下所示:
public Observable<List<Object>> getObjectsForUser() {
return Observable.fromCallable(() -> {
if (objects.size() < 1) {
List<ObjectDto> dtos = dataSource.getAllForUser();
if (dtos != null) {
objects = objectMapper.toDomain(dtos);
}
}
return objects;
}).subscribeOn(Schedulers.io());
}
以这种方式使用:
public Completable refreshOtherObjects() { // How do I return a completable which completes when the code in this lambda Observer has finished execution?
objectRepository.getObjectsForUser().subscribe(objects -> {
for (Object object: objects) {
List<OtherObjectDto> dtos = dataSource.getOtherObjects(object.getId());
if (dtos != null) {
otherObjectDao.upsertOtherObjects(mapper.toEntity(dtos));
}
}
});
}
我的问题是:
当最后描述的方法中的lambda Observer中的代码完成执行后,如何返回完成的Completable?
答案 0 :(得分:2)
与其在subscribe
内嵌套refreshOtherObjects
调用,不如通过在.doOnNext
调用内完成该工作来继续Rx链,然后将链转换为{{1 }}使用Completable
运算符:
ignoreElements()