繁体   English   中英

如何使RxJava间隔立即执行操作

[英]How to make RxJava interval to perform action instantly

您好我正在观察我的服务器每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时间之后(在我的情况下为15秒)。 查看区间方法的rxJava文档:

http://reactivex.io/documentation/operators/interval.html

这应该是这样的。

问题:有没有办法立即执行代码然后重复间隔?

您可以立即执行它,如下所示:

Observable.interval(0, 1000, TimeUnit.MILLISECONDS).subscribe();

您正在寻找的是startWith

Observable.interval(15, SECONDS).startWith(1);

这将从间隔获得更新,但在订阅后立即发出一个项目。

你可以用`

Observable.interval(1, TimeUnit.SECONDS).startWith(0)

`订阅中的重复值为“0”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM