java - RxJava2 concat() 只运行第一个 Observable

标签 java android rx-java reactive-programming rx-java2

我有 3 个返回 Observable(String) 的方法。我需要一个一个地执行这些方法。每种方法大约需要 2 或 3 分钟。我正在使用下一个代码:

Observable.concat(one(),two(),three())
          .subscribeWith(new DisposableObserver<String>() {
                    @Override
                    public void onNext(String s) {
                        LOG.debug(s);
                    }

                    @Override
                    public void onError(Throwable e) {
                        LOG.error(e.toString());
                    }

                    @Override
                    public void onComplete() {

                    }
                });

只执行第一种方法。忽略第二种和第三种方法。我不明白这是什么问题?我正在使用 RxJava2 版本 2.1.6

最佳答案

显然,one() 是一个 Observable,它 发出 onComplete() 事件,这意味着,它还没有完成,而 concat() 运算符将等到 observable 发出一个终端事件,然后才开始下一个 observable。

如果您不具备第一个 observable 的创建逻辑,您可以使用 Single.fromObservable() 将 observable 转换为 Single API。

Observable.concat(Single.fromObservable(one()), two(), three())

如果您确实有权访问第一个可观察对象的创建逻辑,则发出一个终端事件(即 emitter.onComplete())。


正如 David Karnok 在评论部分概述的那样:

Single.fromObservable() also requires a completing source so it can error you if that source happens to have no items.

关于java - RxJava2 concat() 只运行第一个 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48281072/

相关文章:

android - 实现 onClickListener 后应用程序崩溃

android - 从使用 Firefox 移动版查看的 Android 设备上的 anchor 元素中删除点击轮廓

android - fragment 的 refcount() 或 autoConnect()

stream - rxjava 和终止流

java - 使用 ObjectMapper 的 org.codehaus.jackson.map.JsonMappingException

java - Android 上的 LibGDX 3D 低帧率

android getHeight()/getWidth 与 RelativeLayout

java - 进入多窗口模式时奇怪的生命周期回调排序

javascript - 如何使用谷歌应用程序脚本删除事件并发送电子邮件

java - 如何保持时间?