Как сделать RxJava интервал для выполнения действия мгновенно
Привет я делаю наблюдаемым, чтобы спросить мой сервер о его онлайн/оффлайн-статусе каждые 15 секунд:
public Observable<Response> repeatCheckServerStatus(int intervalSec, final String path) {
return Observable.interval(intervalSec, TimeUnit.SECONDS)
.flatMap(new Func1<Long, Observable<Response>>() {
@Override
public Observable<Response> call(Long aLong) {
return Observable.create(new Observable.OnSubscribe<Response>() {
@Override
public void call(Subscriber<? super Response> subscriber) {
try {
Response response = client.newCall(new Request.Builder()
.url(path + API_ACTION_CHECK_ONLINE_STATUS)
.header("Content-Type", "application/x-www-form-urlencoded")
.get()
.build()).execute();
subscriber.onNext(response);
subscriber.onCompleted();
if (!response.isSuccessful())
subscriber.onError(new Exception());
} catch (Exception e) {
subscriber.onError(e);
}
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
});
}
после вызова этого метода первое выполнение кода будет после intervalSec time (15sec в моем случае). Глядя на документацию RxJava интервального метода:
http://reactivex.io/documentation/operators/interval.html
так и должно быть.
вопрос: есть ли способ, чтобы выполнить код мгновенно и затем повторить через интервалы?
3 ответов
то, что вы ищете startWith
Observable.interval(15, SECONDS).startWith(1);
Это получит обновления из интервала, но выделит один элемент сразу после подписки.
вы можете выполнить его сразу же и так:
Observable.interval(0, 1000, TimeUnit.MILLISECONDS).subscribe();
вы можете использовать `
Observable.interval(1, TimeUnit.SECONDS).startWith(0)
` Это повторяющееся значение " 0 " в subscribe.