如何从rxjava中的延迟订阅开始挂钩observable

时间:2015-07-08 11:50:35

标签: reactive-programming rx-java

可用性:当用户按下按钮时,搜索在3000毫秒后开始。搜索开始时,应显示进度条。

我推迟订阅:

Observable<SearchResult> delayedSearch = search
.delaySubscription(3000, TimeUnit.MILLISECONDS)
//not working
.doOnSubscribe(() -> log(should appear progress bar))

delayedSearch.subscribe(result -> log(should disappear progress bar));

问题:我无法挂钩启动可观察的执行。
如何解决问题的最佳方法?或者可能是另一种解决方案?

1 个答案:

答案 0 :(得分:2)

我找到了解决方案 我创建了showProgress observable:

Observable showProgress = Observable.create(subscriber -> {
            log("showProgress")
            subscriber.onNext(null);
            subscriber.onCompleted();
        }).subscribeOn(AndroidSchedulers.mainThread());

并在搜索前添加:

Observable<SearchResult> searchWithProgress = showProgress.flatMap((Func1) o -> search);

所以我可以这样使用它:

Observable<SearchResult> delayedSearch = searchWithProgress.delaySubscription(3000, TimeUnit.MILLISECONDS);

delayedSearch.subscribe(result -> log(hideProgress);