当前位置:  开发笔记 > 编程语言 > 正文

如果RxJava observable需要很长时间,你如何显示微调器?

如何解决《如果RxJavaobservable需要很长时间,你如何显示微调器?》经验,为你挑选了1个好方法。

我觉得有人必须尝试这个,但如果一个观察者需要很长时间,我无法想出一个很好的方法来做某事.

这是我想要的流程.

Start a search.
If the search takes longer than some time,
    show a spinner or show progress bar.
When finished do subscription action and hide spinner/progress bar.

我能想到的最接近的就像一个Zip

manager.search(searchTerm)
       .zip(Observable.Timer(1, TimeUnit.SECONDS))
       .subscribe(
           // if the search is non null then we are good
           // if the long time is non 0 we need to show spinner
       );

还有更好的事吗?我整天都在努力,没有成功.在一个完美的世界里,我觉得我会想要这样的东西

manager.search(searchTerm)
       .timeout(i -> /* do timeout stuff */, 1, TimeUnit.SECONDS)
       .subscribe(item -> /* do search result stuff */);

akarnokd.. 7

您可以通过超时发布搜索Observable来完成此操作:

Observable source = Observable.just(1).delay(5, TimeUnit.SECONDS);

source
.doOnSubscribe(() -> System.out.println("Starting"))
.publish(o -> 
    o.timeout(1, TimeUnit.SECONDS, Observable.fromCallable(() -> {
        System.out.println("Spinning...");
        return null;
    })).ignoreElements().mergeWith(o)
)
.toBlocking()
.subscribe(v -> {
    System.out.println("Hide spinner if shown.");
    System.out.println(v);
});

这通过将源分成两个热通道来工作:第一个通道将运行一个timeout操作员,当超时时,启动另一个具有显示旋转控制的副作用的Observable.其中一种方法是使用fromCallable它并忽略其结果(这也避免了重复).第二个通道将保持不变并与超时通道合并以提供实际值.



1> akarnokd..:

您可以通过超时发布搜索Observable来完成此操作:

Observable source = Observable.just(1).delay(5, TimeUnit.SECONDS);

source
.doOnSubscribe(() -> System.out.println("Starting"))
.publish(o -> 
    o.timeout(1, TimeUnit.SECONDS, Observable.fromCallable(() -> {
        System.out.println("Spinning...");
        return null;
    })).ignoreElements().mergeWith(o)
)
.toBlocking()
.subscribe(v -> {
    System.out.println("Hide spinner if shown.");
    System.out.println(v);
});

这通过将源分成两个热通道来工作:第一个通道将运行一个timeout操作员,当超时时,启动另一个具有显示旋转控制的副作用的Observable.其中一种方法是使用fromCallable它并忽略其结果(这也避免了重复).第二个通道将保持不变并与超时通道合并以提供实际值.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有