Как начать мгновенный запуск наблюдаемого без задержки?

Я хочу, чтобы мой наблюдаемый выстрелил немедленно, и снова каждую секунду. interval не будет срабатывать сразу. Я нашел этот вопрос, который предложил использовать startWith, который немедленно startWith, но затем я получаю дубликат первой записи.

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

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

Как я могу немедленно запустить интервал, но не дублировать первую запись?

Ответы

Ответ 1

Observable.timer(0, 1000) начнется немедленно.

Ответ 2

RxJs 6

interval(100).pipe(startWith(0)).subscribe(() => { //your code }); 

или с таймером:

import {timer} from 'rxjs/observable/timer';
timer(0, 100).subscribe(() => {

    });

Ответ 3

С RxJava2 нет проблемы с дублированной первой записью, и этот код работает нормально:

io.reactivex.Observable.interval(1, TimeUnit.SECONDS)
        .startWith(0L)
        .subscribe(aLong -> {
            Log.d(TAG, "test");    // do whatever you want
    });

Обратите внимание, что вам нужно пройти Long в startWith, поэтому 0L.