如何解决订阅链上时,嵌套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 举报,一经查实,本站将立刻删除。