用RxJava重复对状态的操作
这是在Kotlin,但我认为任何编写Java的人都能理解。
我正在尝试用Rx制作一个秒表,而且我在实际停止和启动时遇到了一些麻烦。 最大的问题是,我不知道如何保持现在的时间,而修改它作为不同的行动(开始和停止)进来。这是我现在所拥有的。
fullTime.switchMap { startTime -> controlCommands.switchMap { command -> when (command) { ControlState.PLAY -> Observable.interval(1L, TimeUnit.SECONDS).map { ControlState.PLAY } ControlState.PAUSE -> Observable.just(ControlState.PAUSE) else -> Observable.just(ControlState.STOP) } } }
fullTime
和controlCommands
是Observable
,它们分别发出有关当前开始时间的事件,从中倒数,然后说下一步该做什么。 我想链接controlCommands
并能够保持状态在startTime
开始,当PLAY
事件出现时将倒计时, PAUSE
出现时PAUSE
,并在出现STOP
时在startTime
复位。
scan
几乎工作,但我不知道如何停止计时器命中0和PLAY
仍然每秒钟发送,因为它会发送重复的信息。 也不允许状态和观察值之间的分离。 所以我scan
积累的值必须是Observable
内部的值(如果有意义的话)。
任何想法我应该做什么?
如果我正确地理解你,你正在scan
正确的轨道。 您只需
- 一个
.takeUntil(state -> state.hasCompleted)
停止当你需要停止(也许一个takeWhile
,这取决于)。 - 然后一个
.map(state -> state.getValute())
来获取该值
这有道理吗?