我有一个 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中的代码执行完毕后,就完成了?
而不是嵌套一个 subscribe
调用 refreshOtherObjects
,继续Rx链,只需在一个Rx链内做该工作。.doOnNext
调用,然后将链转换为一个 Completable
使用 ignoreElements()
运营商。
public Completable refreshOtherObjects() { // How do I return a completable which completes when the code in this lambda Observer has finished execution?
return objectRepository.getObjectsForUser()
.doOnNext(objects -> {
for (Object object: objects) {
List<OtherObjectDto> dtos = dataSource.getOtherObjects(object.getId());
if (dtos != null) {
otherObjectDao.upsertOtherObjects(mapper.toEntity(dtos));
}
}
})
.ignoreElements();
}