Ответ 1
Observable.timer(0, 1000)
начнется немедленно.
Я хочу, чтобы мой наблюдаемый выстрелил немедленно, и снова каждую секунду. interval
не будет срабатывать сразу. Я нашел этот вопрос, который предложил использовать startWith
, который немедленно startWith
, но затем я получаю дубликат первой записи.
Rx.Observable.interval(1000).take(4).startWith(0).subscribe(onNext);
https://plnkr.co/edit/Cl5DQ7znJRDe0VTv0Ux5?p=preview
Как я могу немедленно запустить интервал, но не дублировать первую запись?
Observable.timer(0, 1000)
начнется немедленно.
RxJs 6
interval(100).pipe(startWith(0)).subscribe(() => { //your code });
или с таймером:
import {timer} from 'rxjs/observable/timer';
timer(0, 100).subscribe(() => {
});
С RxJava2 нет проблемы с дублированной первой записью, и этот код работает нормально:
io.reactivex.Observable.interval(1, TimeUnit.SECONDS)
.startWith(0L)
.subscribe(aLong -> {
Log.d(TAG, "test"); // do whatever you want
});
Обратите внимание, что вам нужно пройти Long
в startWith, поэтому 0L
.