如何在链内的RXJava2中使用.delay()和.timer()?

时间:2018-07-25 14:45:53

标签: kotlin rx-java2

我想学习如何使用RX的.delay().timer()

fun main(args: Array<String>) {
    showTime()
        .delay(2, TimeUnit.SECONDS)
        .andThen(showTime())
        .subscribe()
}

private fun showTime(): Completable =
    Completable.fromAction {
        val time = Instant.ofEpochMilli(System.currentTimeMillis()).atZone(ZoneId.systemDefault()).toLocalTime()
        println(time)
    }

我希望以上代码在两次打印之间间隔2秒打印两次。但是,它只能打印一次。

我也尝试使用.timer(),但也没有用。

    showTime()
        .andThen(Completable.timer(2, TimeUnit.SECONDS))
        .andThen(showTime())
        .subscribe()

有人可以在RX中使用.delay().timer()时,在2秒之间向我展示两次正确的打印时间方法吗?

1 个答案:

答案 0 :(得分:1)

尝试使用self-它会发出带有延迟的物品。在下面的示例中,它每2秒钟(class LocalGuiMaker(makeGui): def start(self): self.menuBar = [ ('File', 0, [('Open', 0, lambda: 0), ('Quit', 0, sys.exit)]), ('Edit', 0, [('Add', 0, lambda: 0), ('Remove', 0, lambda: 0)]), ('Help', 0, [('About', 0, lambda: 0), ('Optins', 0, lambda: 0)]) ] self.toolBar = [ ('Edit', self.update, {'side': 'left'}), ('Add', lambda: 0, {'side': 'left'}), ('Remove', lambda: 0, {'side': 'left'}) ] self.toolbarColor = '#3C3F41' LocalGuiMaker(root).mainloop() )滴答两次(Observable.interval),然后停止。

interval

如果您仍然只想使用take(2)Observable .interval(2, TimeUnit.SECONDS) .take(2) .subscribe(); ,则可以执行以下操作。 实际上,我认为您不应该在这里使用timer,因为当您在第一个delay之后调用第二个delay时,它仍然会在给定的时间延迟发射。

timer