【发布时间】:2016-11-04 16:34:54
【问题描述】:
我有两个Observables。 observableDisconnectContact 负责调用 API 请求删除联系人,它工作正常。如果联系人已从数据库中删除,第二个 observableDeleteContact 会发出真或假。我使用greeDao。
Observable<Boolean> observableDisconnectContact = apiClient.observableDisconnectContact(contactModel.getId())
Observable<Boolean> observableDeleteContact = contactModelRxDao.deleteByKey(contactModel.getDbId())
我想结合两者,但第二个 observable 应该在第一个完成时开始并返回 true。我考虑使用concat() 和first()。但我必须知道,两个流发出的结果都是正确的。所以我使用combineLatest() 或zip()。但这不是一个好主意,因为两个流同时运行。我注意到first() 运算符不适用于zip() 和combineLatest()。
如果第一个返回 false 并且两个流的结果应该是一个结果,我如何结合 Observables 在第一个流之后的第二个开始的位置。
Observable.combineLatest(observableDisconnectContact, observableDeleteContact, new Func2<Boolean, Boolean, Boolean>() {
@Override
public Boolean call(Boolean isDisconnectSuccess, Boolean isRemoveSuccess) {
return isDisconnectSuccess && isRemoveFromDatabaseSuccess;
}
}).subscribe(new Subscriber<Boolean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Boolean isDeleted) {
if (isDeleted) {
//TODO
}
}
});
【问题讨论】:
标签: rx-java reactive-programming rx-android greendao