首页 > 解决方案 > RxJava:在数组的迭代之间使用计时器

问题描述

我正在尝试使用 RxJava 进行迭代和数字数组,其中每个数字代表我想在执行下一次发射之前执行的超时。

这就是我想出的..

    AtomicInteger index = new AtomicInteger(0);     
    Long[] intervals = {1L,2L,3L,4L};
    Observable.fromArray(intervals)
    .zipWith(Observable.interval(intervals[index.getAndIncrement()], TimeUnit.SECONDS), (a,b) -> a)
    .subscribe(event -> {
        System.out.println(LocalDateTime.now());
    });     

这段代码中的问题是,它Observable.interval采用数组中的第一个索引,但忽略了,getAndIncrement()所以我只得到 1 秒的超时。

任何想法如何使这项工作?

标签: rx-javarx-java2

解决方案


试试这个:

Long[] intervals = {1L, 2L, 3L, 4L};

Flowable.fromArray(intervals)
.flatMap(interval -> Flowable.timer(interval, TimeUnit.SECONDS)
                     .map(w -> interval), 1)
.subscribe(event -> {
    System.out.println(LocalDateTime.now());
})

推荐阅读