Rx java RxJava与布尔运算符组合
我有两个Rx java RxJava与布尔运算符组合,rx-java,reactive-programming,rx-android,greendao,Rx Java,Reactive Programming,Rx Android,Greendao,我有两个可观察对象observableDisconnectContact负责调用API请求以删除联系人,并且工作正常。如果联系人已从数据库中删除,则第二个observableDeleteContact将发出true或false。我使用greeDao Observable<Boolean> observableDisconnectContact = apiClient.observableDisconnectContact(contactModel.getId()) Observa
可观察对象
observableDisconnectContact
负责调用API请求以删除联系人,并且工作正常。如果联系人已从数据库中删除,则第二个observableDeleteContact
将发出true或false。我使用greeDao
Observable<Boolean> observableDisconnectContact = apiClient.observableDisconnectContact(contactModel.getId())
Observable<Boolean> observableDeleteContact = contactModelRxDao.deleteByKey(contactModel.getDbId())
可观察的断开触点
.filter(新函数1(){
@凌驾
公共布尔调用(布尔aBoolean){
返回aBoolean;
}
})
.flatMap(新函数1(){
@凌驾
公共可观测呼叫(对象o){
返回可观察的联系人;
}
});
如果
observatedisconnectcontact
发出true
则结果observatedeletecontact将发出observatedeletecontact
的结果,如果false
则过滤(不发出任何内容),我相信使用正确的成功和失败语义将使代码更具可读性。我的意思是使用Completable
,它要么在成功时完成,要么在失败时发出错误
observableDisconnectContact
.flatMap(isDisconnectSuccessful -> {
if(isDisconnectSuccessful) return observableDeleteContact;
else return Observable.just(false);
})
.subscribe(isBothActionsSuccessful -> {
if(isBothActionsSuccessful) {
//success!
} else {
//something goes wrong
}
});
例如:
Completable observableDisconnectContact = ...;
Completable observableDeleteContact = ...;
observableDisconnectContact
.andThen(observableDeleteContact)
.subscribe(new CompletableObserver() {
@Override
public void onComplete() {
}
@Override
public void onError(Throwable e) {
}
});
注意:代码可能无法编译,因为我没有在任何地方测试它。如果发现任何错误,请进行编辑它几乎正常。如果
observedisconnectcontact
发出false,则调用justoncompleted()
。有可能发射假信号吗?@Michael有可能,请检查我的答案
observableDisconnectContact
.flatMap(isDisconnectSuccessful -> {
if(isDisconnectSuccessful) return observableDeleteContact;
else return Observable.just(false);
})
.subscribe(isBothActionsSuccessful -> {
if(isBothActionsSuccessful) {
//success!
} else {
//something goes wrong
}
});
Completable observableDisconnectContact = ...;
Completable observableDeleteContact = ...;
observableDisconnectContact
.andThen(observableDeleteContact)
.subscribe(new CompletableObserver() {
@Override
public void onComplete() {
}
@Override
public void onError(Throwable e) {
}
});