我有一个基本模拟状态图的可观察流。例如:通过可观察流循环
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()getter方法?如果是这样,则安装人员应提出通知该财产已更改的事件。在.net中,我们有INotifyPropertyChanged模式/接口。 – Aron
不太熟悉那种模式。我会调查。谢谢。 –
对不起,你的问题不清楚。你提到一个状态图,但你的代码没有显示。你能否包含一个你想达到的大理石图?无论如何,状态图通常使用'scan'很容易实现。 –