当一个observable's on next被触发时,可补全表必须完成。

问题描述 投票:0回答:1

我有一个 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中的代码执行完毕后,就完成了?

java rx-java
1个回答
2
投票

而不是嵌套一个 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();
    }
© www.soinside.com 2019 - 2024. All rights reserved.