reactive-programming - 如何在 rxjava 中 Hook 可观察的延迟订阅

标签 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));

问题:我无法 Hook start observable 的执行。
如何最好地解决问题?或者也许是另一种解决方案?

最佳答案

我找到了解决方案。
我创建了可观察的 showProgress:

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);

关于reactive-programming - 如何在 rxjava 中 Hook 可观察的延迟订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31291794/

相关文章:

android - io.reactivex.exceptions.UndeliverableException : java. io.InterruptedIOException

android - 带有 Flowable 的房间 : initialize database if it's empty

java - 并行执行的可观察量

rx-java - 如何在 RxJava 中制作冷单 'hot'

java - 限制 Publisher 中的预取

c# - 使用 Reactive Extensions 进行数据库轮询

haskell - react 香蕉 : consume parametrized call to an external API

java - 如何使 Observable 在 1 秒的时间间隔后发出字符

java - RxJava : Thread pool for network calls

ios - 使用 Reactive Cocoa RACSignal 启用 UIButton