Я не уверен, что мы на 100% на одной странице, но, думаю, вам не хватает одной точки. Может быть, вы подумаете, что я задираю, но я думаю, что было бы неплохо получить наши условия.
Observable
начинает излучать значения, когда Subscriber
подписывается. Поэтому, если вы не думаете о двух отдельных Subscribers
, вы не можете реагировать на испускаемое значение с подпиской , потому что Observer
ничего не испустит.
Это говорит ... что (я думаю) вы хотите сделать можно сделать так:
Observable<Boolean> observableA = /* observable A initialization */;
final Observable<SomeObject> observableB = /* observable B initialization */;
observableA
.flatMap(new Func1<Boolean, Observable<SomeObject>>() {
@Override
public Observable<SomeObject> call(Boolean aBoolean) {
if (!aBoolean) {
throw new IllegalStateException("A dummy exception that is here just to cause the subscription to finish with error.");
}
return observableB;
}
})
.subscribe(
new Action1<SomeObject>() {
@Override
public void call(SomeObject someObject) {
// THIS IS A PART OF THE SUBSCRIBER TO OBSERVABLE B.
// THIS METHOD WILL BE CALLED ONLY IF THE OBSERVABLE A RETURNED TRUE
}
},
new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
// A dummy Action1 so the subscription does not crash on the Exception
}
});
Возможно, решение, о котором я думал, не существует. Да, я думал о двух подписях. Хотя я предпочитаю просто иметь поле для подписки и хранить подписку там/отказаться от подписки, вместо того, чтобы использовать неявную отмену подписки onError. –