RxJava2 concat()只运行第一个Observable

时间:2018-01-16 12:16:33

标签: 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

2 个答案:

答案 0 :(得分:4)

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

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

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

如果您确实可以访问第一个observable的创建逻辑,那么发出一个终端事件(即emitter.onComplete())。

正如David Karnok在评论部分所述:

  

Single.fromObservable()还需要一个完整的来源,因此如果该来源恰好没有项目,它可能会给您带来错误。

答案 1 :(得分:1)

您的第一个观察完成或只发出一个项目吗?根据{{​​3}},它将不会从一个完成后从两个或三个发出项目。