【发布时间】:2018-01-21 15:21:16
【问题描述】:
我从一种名为 getAlldata() 的方法中获得了 Flowable
这个方法会从服务器获取数据,然后根据已经存储在数据库中的数据修改返回的数据。
所以这个方法的过程是这样的:
- 从服务器获取数据
- doOnNext 为每个项目获取 id
- 通过id获取本地数据。
- 修改当前项
问题是:
结果将在实际修改doOnNext() 中的数据之前返回,因为从数据库获取本地数据是另一个可观察的。
问题
如何延迟流直到doOnNext() 上的另一个可观察对象完成?
代码
private Flowable<List<MyModule>> getAlldata() {
return remoteDataSource
.getData().flatMap(data -> Flowable.fromIterable(data))
.doOnNext(new Consumer<MyModule>() {
@Override
public void accept(MyModule singleItem) throws Exception {
localDataSource.getData(singleItem.getId())
.firstElement().toFlowable()
.subscribe(new Consumer<Optional<MyModule>>() {
@Override
public void accept(Optional<MyModule> itemOptional) throws Exception {
if (itemOptional.isPresent()) {
// modify the item
}
}
});
}
})
.distinct()
.sorted(ProductsRepository.this::sortItems)
.toList().toFlowable();
}
【问题讨论】:
-
你需要用 doOnNext 正确映射你的每个 api 响应
-
是的,对于每一项。
标签: java android rx-java rx-java2