当下一个可观察对象触发时,必须完成Completable

时间:2020-06-15 17:02:57

标签: java rx-java

我有一个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?

1 个答案:

答案 0 :(得分:2)

与其在subscribe内嵌套refreshOtherObjects调用,不如通过在.doOnNext调用内完成该工作来继续Rx链,然后将链转换为{{1 }}使用Completable运算符:

ignoreElements()
相关问题