android - Rxjava 2 combineLatest 错误
问题描述
我想从两个方法调用中收集第一次排放,这可以使用 Rxjava 2 的 combineLatest 来实现,但我对语法感到困惑
Observable<Boolean> buildUseCaseObservable(Params params) {
List<Observable> list = new ArrayList<>();
list.add(this.userRepository.fetchUserData());
list.add(this.masterDataRepository.fetchLov());
//I think the problem is in the syntax
return Observable.combineLatest(list, new BiFunction<Boolean, Boolean, Boolean>() {
@Override
public Boolean apply(Boolean aBoolean, Boolean aBoolean2) throws Exception {
System.out.println("FetchRegistrationData complete " + aBoolean + " " + aBoolean2);
return aBoolean && aBoolean2;
}
});
/* this works fine but it waits for onComplete() of both calls
return Observable.zip(
this.userRepository.fetchUserData(),
this.masterDataRepository.fetchLov(),
new BiFunction<Boolean, Boolean, Boolean>() {
@Override
public Boolean apply(@NonNull Boolean aBoolean, @NonNull Boolean aBoolean2) throws Exception {
System.out.println("FetchRegistrationData complete " + aBoolean + " " + aBoolean2);
return aBoolean && aBoolean2;
}
});*/
}
解决方案
您可以使用take()
运算符来限制可观察对象的数量。这意味着一旦两个可观察对象都发出一个值,它们combinerFunction
将计算一个结果并且可观察对象将完成。
return Observable.combineLatest(
this.userRepository.fetchUserData().take(1),
this.masterDataRepository.fetchLov().take(1),
combinerFunction)
推荐阅读
- robotframework - 机器人框架和测试窗口 GUI 工具 - 选择菜单或其他选项和按钮
- php - 使用复选框php将数据插入mysql数据库
- javascript - Javascript:递归计算数组中所有元素的总和?
- scala - 流式传输选项卡未显示结构化流式传输
- android - Gradle Build 卡在 app:transformDexArchiveWithDexMergerForDebug
- rest - Spring Boot osweb.servlet.pagenotfound
- r - R池连接顺序
- swift - 使导航栏透明后如何将其更改回半透明
- python-2.7 - Windows 上的 SSH 执行 selenium 脚本-> 会话未从超时创建:超时从渲染器接收消息:600.000
- javascript - Vuex 中的 Spread 运算符无法使用 babel 正确编译,我不断收到模块构建失败