使用Interval with Operators(RxJava)

时间:2017-07-23 03:39:35

标签: java rx-java rx-java2

我需要每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
                }
            });

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

因为如果你想要skipLast 9个项目,RxJava应首先收集9个项目,然后它可以知道哪些是“最后9个项目”。我想你可以简单地睡3000毫秒onComplete

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