How do I make an Observable Interval start immediately without a delay?

Viewed 44718

I want my observable to fire immediately, and again every second. interval will not fire immediately. I found this question which suggested using startWith, which DOES fire immediately, but I then get a duplicate first entry.

  Rx.Observable.interval(1000).take(4).startWith(0).subscribe(onNext);

https://plnkr.co/edit/Cl5DQ7znJRDe0VTv0Ux5?p=preview

How can I make interval fire immediately, but not duplicate the first entry?

4 Answers

RxJava 2

If you want to generate a sequence [0, N] with each value delayed by D seconds, use the following overload:

Observable<Long> interval(long initialDelay, long period, TimeUnit unit)

initialDelay - the initial delay time to wait before emitting the first value of 0L

Observable.interval(0, D, TimeUnit.SECONDS).take(N+1)

You can also try to use startWith(0L) but it will generate sequence like: {0, 0, 1, 2...}

I believe something like that will do the job too:

Observable.range(0, N).delayEach(D, TimeUnit.SECONDS)
Related