2017-07-23 60 views
0

我需要每1/3秒发出一次网络请求,并在onComplete方法之前等待3秒钟。我怎么做?我的代码在发射物品之前等待3秒钟,这不是我想要的。使用运算符间隔(RxJava)

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

别睡了,但用的组合物与所需的延迟:

Observable.intervalRange(0, postCount, 0, 334, TimeUnit.MILLISECONDS) 
    .concatWith(Observable.empty().delay(3, TimeUnit.SECONDS)) 
    ... // react to each tick 
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()