У меня есть поток наблюдаемых, который в основном эмулирует диаграмму состояния. Например:Цитирование через наблюдаемый поток
whenThisHappens()
.switchMap(i -> {
if (i.isThisThing()) {
return whenThatHappens();
} else {
return nothingHappened();
}
}
.subscribe(thing -> {
if (thing.isThatThing()) {
log("Got that thing");
} else {
log("Got nothing");
}
});
Вопрос заключается в том, что я хочу, чтобы перебрать входа, пока какое-то событие не происходит (это в течение длительного работающей службы на Android). Сейчас я в состоянии сделать это, сохраняя наблюдаемым в переменной, подписавшись на него, а затем отписки и Повторная подписка на него в это onComplete
obs = whenThisHappens()
.switchMap(i -> {
if (i.isThisThing()) {
return whenThatHappens();
} else {
return nothingHappened();
}
}
.doOnNext(thing -> {
if (thing.isThatThing()) {
log("Got that thing");
} else {
log("Got nothing");
}
})
.doOnComplete(i -> {
obs.unsubscribe();
obs.subscribe();
}
obs.subscribe();
Но я вроде чувствую, что я делаю что-то действительно неправильно Вот. Есть ли лучший способ сделать это? Я посмотрел на retry
, но ошибки при отправке, чтобы повторить попытку, выглядят так же плохо, как и то, что я делаю сейчас.
ли isThatThing() добытчиками? Если это так, сеттеры должны возбуждать события, которые уведомляют, что имущество изменилось. В .net у нас есть шаблон/интерфейс INotifyPropertyChanged. – Aron
Не слишком хорошо знаком с этим рисунком. Я буду исследовать. Благодарю. –
Извините, ваш вопрос мне непонятен. Вы говорите о диаграмме состояния, но ваш код ничего не показывает. Не могли бы вы включить мраморную диаграмму того, что вы хотите достичь? В любом случае диаграммы состояний обычно легко реализуются с помощью 'scan'. –