问题描述
嗨,
在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 (将#修改为@)