首页 > 解决方案 > RxJava如何创建一个以不同延迟执行多个作业的间隔?

问题描述

我对 RxJava 很陌生,所以我的问题可能完全是愚蠢的,但我不知道该怎么做。

所以我有N个实现以下接口的工作

interface Worker {
  int interval();
  void job();
}

我想要实现的是一个类似计时器的功能,每次经过一段时间后都会调用这些Workers函数。job()interval()

到目前为止我尝试过的

Observable.fromArray(worker1, worker2)
                .flatMap(worker -> Observable.just(worker).delay(worker.delay(), TimeUnit.SECONDS))
                .subscribe(Worker::job);

这工作正常,在给定时间过去后,作业是异步执行的。

但这只执行了一次。我知道我需要以interval()某种方式使用操作员,但无法理解它。

提前致谢

标签: androidrx-javareactive-programmingandroid-threading

解决方案


如果我正确理解你的问题,你需要做这样的事情:

Observable.fromArray(worker1, worker2)
    .flatMap { worker ->
        Observable.interval(worker.interval(), TimeUnit.SECONDS)
            .flatMap { Observable.just(worker).delay(worker.delay(), TimeUnit.SECONDS) }
     }
     .subscribe(Worker::job)

您应该注意到,在此实现中,您的worker.job()调用将以意外的顺序进行


推荐阅读