2017-07-23 8 views
0

Ich muss alle 1/3 Sekunden eine Netzwerkanforderung stellen und 3 Sekunden vor der Complete-Methode warten. Wie mache ich das? Mein Code unten wartet 3 Sekunden vor dem Aussenden von Gegenständen, und es ist nicht das, was ich will.Verwenden des Intervalls mit Operatoren (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 
       } 
      }); 

Antwort

2

nicht schlafen Sie aber Zusammensetzung mit der gewünschten Verzögerung verwenden:

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

Denn wenn Sie skipLast 9 Artikel wollen, sollten RxJava 9 Gegenstände sammeln und dann kann es wissen, welche sind ‚letzten 9 Artikel‘. Ich denke du kannst einfach 3000 ms schlafen onComplete.

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