У меня есть два Observables
. observableDisconnectContact
отвечает за вызов API для удаления контакта, и он работает правильно. Второй observableDeleteContact
испускает true или false, если контакт удален из базы данных. Я использую greeDao
.Комбинация RxJava с булевыми операторами
Observable<Boolean> observableDisconnectContact = apiClient.observableDisconnectContact(contactModel.getId())
Observable<Boolean> observableDeleteContact = contactModelRxDao.deleteByKey(contactModel.getDbId())
Я хочу комбинировать оба, но второй наблюдаемый должен начинаться, когда первый делается и возвращает 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
@ Майкл можно, пожалуйста, проверьте мой ответ –