使用带运算符的区间 (RxJava)

Using the Interval with Operators (RxJava)

我需要每 1/3 秒发出一次网络请求,并在 onComplete 方法之前等待 3 秒。我怎么做?我下面的代码在发出项目之前等待 3 秒,这不是我想要的。

    disposable = Observable
            .interval(0, 334, TimeUnit.MILLISECONDS)
            .skipLast(9)
            .take(postsCount + 9)
            .subscribeWith(new DisposableObserver<Long>() {
                @Override
                public void onNext(@NonNull Long number) {
                    // Code in onNext method
                }

                @Override
                public void onError(@NonNull Throwable e) {
                    // Code in onError method
                }

                @Override
                public void onComplete() {
                  // Code in onComplete method
                }
            });

因为如果你想 skipLast 9 项,RxJava 应该先收集 9 项,然后它才能知道哪些是 'last 9 items'。我想你可以睡 3000 毫秒 onComplete.

Observable.interval(0, 334, TimeUnit.MILLISECONDS)
        .take(postsCount)
        .doOnComplete { Thread.sleep(3000) }
        .doOnNext { println(it) }
        .doOnComplete { println("completed") }
        .blockingSubscribe()

不要睡觉,但使用具有所需延迟的构图:

Observable.intervalRange(0, postCount, 0, 334, TimeUnit.MILLISECONDS)
    .concatWith(Observable.empty().delay(3, TimeUnit.SECONDS))
    ... // react to each tick