微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

订阅链上时,嵌套Maybe <>不会执行

如何解决订阅链上时,嵌套Maybe <>不会执行

嗨,

在RxJava链中,存在嵌套的依赖Maybes,这意味着内部的将使用外部的结果。这里的问题是当我在链上subscribe时,它将仅导致外部Maybe被执行,而内部Maybe将被忽略!这是一个示例:

    redis.rxHgetall(key)
            .map(new Function<Response,List<M>>() {
                @Override
                public List<M> apply(@NonNull Response response) throws Exception {
                    response.getKeys().stream().forEach(new Consumer<String>() {
                        @Override
                        public void accept(String s) {
                            mList.add(new M(s,response.get(s).toString()));
                        }
                    });
                    return mList;
                }
            })
            .map(new Function<List<M>,List<M>>() {
                @Override
                public List<M> apply(@NonNull List<M> mList) throws Exception {
                    mList.stream().forEach(new Consumer<M>() {
                        @Override
                        public void accept(M m) {
                            final List<Property> propertyList = new ArrayList<>();
                            redis.rxHgetall(m.getName())
                                    .map(new Function<Response,M>() {
                                        @Override
                                        public M apply(@NonNull Response response) throws Exception {
                                            response.getKeys().stream().forEach(new Consumer<String>() {
                                                @Override
                                                public void accept(String s) {
                                                    propertyList.add(
                                                            new Property(s,response.get(s).toString()));
                                                }
                                            });
                                            m.setProperties(propertyList);
                                            return m;
                                        }
                                    });
                        }
                    });
                    return mList;
                }
            })
            .subscribe(new MaybeObserver<List<M>>() {
                @Override
                public void onSubscribe(@NonNull disposable disposable) {

                }

                @Override
                public void onSuccess(@NonNull List<M> mList) {
                    resultList.add(new MGroup(m_group_id,mList));
                    future.complete(resultList);
                }

                @Override
                public void onError(@NonNull Throwable throwable) {

                }

                @Override
                public void onComplete() {

                }
            });

在这里第一 flatMap从Redis获取一些密钥,然后第二 flatMap再次调用Redis获取密钥的一些值在第一 flatMap提取。当我订阅该链时,第一个flatMap将完全执行,但是第二个flatMap中类型为Maybe的redis.rxHgetall的结果将不会执行!

我也尝试在第二个flatMap上订阅Maybe,它导致内部Maybe被执行,但是在外部Maybe之后(在第一个flatMap中),这是我需要调用future.complete(resultList);时flatMaps已完全执行。

map(new Function<List<M>,List<M>>() {
            @Override
            public List<M> apply(@NonNull List<M> mList) throws Exception {
                mList.stream().forEach(new Consumer<M>() {
                    @Override
                    public void accept(M m) {
                        final List<Property> propertyList = new ArrayList<>();
                        redis.rxHgetall(m.getName())
                                .map(new Function<Response,M>() {
                                    @Override
                                    public M apply(@NonNull Response response) throws Exception {
                                        response.getKeys().stream().forEach(new Consumer<String>() {
                                            @Override
                                            public void accept(String s) {
                                                propertyList.add(
                                                        new Property(s,response.get(s).toString()));
                                            }
                                        });
                                        m.setProperties(propertyList);
                                        return m;
                                    }
                                }).subscribe();  

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。