我有两个Observables
。 observableDisconnectContact
负责调用删除联系人的API请求并正常工作。如果联系人已从数据库中删除,则第二个observableDeleteContact
会发出真或假。我使用greeDao
。RxJava结合布尔运算符
Observable<Boolean> observableDisconnectContact = apiClient.observableDisconnectContact(contactModel.getId())
Observable<Boolean> observableDeleteContact = contactModelRxDao.deleteByKey(contactModel.getDbId())
我想结合两者,但第二个observable应该在第一个完成时启动并返回true。我想使用concat()
和first()
。但我必须知道,这两种流都会发出结果是真的。所以我使用combineLatest()
或zip()
。但是,由于两个流都在同一时间运行,这不是一个好主意。我注意到first()
运营商不适用于zip()
和combineLatest()
。
如何结合两个Observables
第二次启动后第一个流是否如果第一个返回false和两个流的结果应作为一个结果。
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
}
}
});
这几乎是很好。如果'observableDisconnectContact'发出false,它就被称为'onComplited()'。是否有可能发布虚假? – Michael
@迈克尔是可能的,请检查我的答案 –